Le -n
le drapeau est pour
--no-act
Aucune action :affiche les fichiers qui auraient été renommés.
Il est donc normal que vous n'ayez aucune modification.
Concernant votre commande, elle fonctionne pour moi :
$ touch "a @ test"
$ ls
a @ test
$ rename -n 's/ |\$|@/_/g' *
a @ test renamed as a___test
Peut-être que selon votre shell, vous devez échapper au |
$ rename -n 's/ \|\$\|@/_/g' *
Ou vous pouvez utiliser le […]
notation pour grouper les caractères :
$ rename -n 's/[ @\$]/_/g' *
Vous pouvez essayer comme ceci :
for file in ./*Block*
do echo mv "$file" "${file//[ ()@$]/_}"
done
Si vous êtes satisfait du résultat, supprimez le echo
avant mv
pour renommer les fichiers.
à la recherche d'un beau script pour supprimer les caractères spéciaux ainsi que les caractères spéciaux allemands, en les remplaçant par des caractères universels pour ne pas supprimer les informations utiles, j'ai mis à jour la dernière version du script qui présentait quelques problèmes mineurs entraînant :
#!/bin/bash
for file in ./*
do
infile=`echo "${file:2}"|sed \
-e 's|"\"|"\\"|g' \
-e 's| |\ |g' -e 's|!|\!|g' \
-e 's|@|\@|g' -e 's|*|\*|g' \
-e 's|&|\&|g' -e 's|]|\]|g' \
-e 's|}|\}|g' -e 's|"|\"|g' \
-e 's|,|\,|g' -e 's|?|\?|g' \
-e 's|=|\=|g' `
outfileNOSPECIALS=`echo "${file:2}"|sed -e 's|[^A-Za-z0-9._-]|_|g'`
outfileNOoe=`echo $outfileNOSPECIALS| sed -e 's|ö|oe|g'`
outfileNOae=`echo $outfileNOoe| sed -e 's|ä|ae|g'`
outfileNOue=`echo $outfileNOae| sed -e 's|ü|ue|g'`
outfileNOOE=`echo $outfileNOue| sed -e 's|Ö|OE|g'`
outfileNOAE=`echo $outfileNOOE| sed -e 's|Ä|AE|g'`
outfileNOUE=`echo $outfileNOAE| sed -e 's|Ü|UE|g'`
outfileNOss=`echo $outfileNOUE| sed -e 's|ß|ss|g'`
outfile=${outfileNOss}
if [ "$infile" != "${outfile}" ]
then
echo "filename changed for " $infile " in " $outfile
mv "$infile" ${outfile}
fi
done
exit
résultant en :
@don_crissti :Il fait le hokus-pokus avec l'infile puisque Linux aurait ses propres problèmes avec la gestion des caractères spéciaux lors du déplacement du nom de fichier.