Grâce à toutes vos idées, j’ai pu créer une solution qui réponde à mes besoins.
Une fonction (ffn) qui renomme un fichier selon des critères à définir (ici, transformation des espaces et autres caractères problématiques en underscore, suppression de certains caractères)
Une deuxième (renameAll) qui renomme (selon les même critères) tous les fichiers et répertoires situés dans un répertoire donné.
Un alias (ra) qui renomme (selon les même critères) tous les fichiers et répertoires situés dans le répertoire courant.
Une troisième (rar) qui renomme (selon les même critères) tous les fichiers et répertoires situés dans le répertoire courant, avec traitement récursif des sous dossiers.
Code à placer dans son .bashrc :
function ffn #format file name
{
dir=$1
fileName=$2
tmpName=$(echo "$fileName" | tr -d '",;!?:' ) #suppressions de chars bizarres
newName=$(echo "$tmpName" | tr "'/\ ()" "______") #changement en underscore
if [ "$newName" != "$fileName" ]
then mv "$dir/$fileName" "$dir/$newName"
if [ -d "$dir/$newName" ]
then echo "<DIR> $dir/$newName"
else ls "$dir/$newName"
fi
fi
}
#renomme le fichier donné en argument $1, avec sa dir en $2
function renameAll
{
ls "$1" | while read -r f #précisément nécessaire pour les filename avec espaces
do ffn "$1" "$f";
done
}
#renomme ts les fichiers et répertoires du rep $1 ; ne traite pas récursivement
alias ra='renameAll .'
function rar #rename_all_récursif
{
echo "." | cat > liste #le fichier doit exister, ne pas être vide, et contenir le rep courant en fin de liste
shopt -s globstar #permet la récursivité sur l’expression **
for e in **; do
if [ -d "$e" ]
then sed -i "1i\\
$e" liste #ajout des lignes par le début du fichier
fi # (afin de modifier le contenu des feuilles en premier, et le tronc en dernier)
done # constitution de la liste bien ordonnée des répertoires à traiter
ll liste
cat liste | while read -r d #précisément nécessaire pour les filename avec espaces
do renameAll "$d"
done
echo "ok"
}
#formatage général des noms de fichiers et répertoires du répertoire courant et ss répertoires
On peut sans doute faire mieux, mais ça, c’est testé et ça marche (je pense à ceux qui comme moi ne sont pas des cadors).
Modération : merci à l'avenir d'utiliser les balises code (explications ici).