Il -n
flag è per
--no-act
Nessuna azione:mostra quali file sarebbero stati rinominati.
Quindi è normale se non hai modifiche.
Per quanto riguarda il tuo comando, per me funziona:
$ touch "a @ test"
$ ls
a @ test
$ rename -n 's/ |\$|@/_/g' *
a @ test renamed as a___test
Forse a seconda della tua shell, devi sfuggire al |
$ rename -n 's/ \|\$\|@/_/g' *
Oppure puoi usare il […]
notazione per raggruppare i caratteri:
$ rename -n 's/[ @\$]/_/g' *
Potresti provare così:
for file in ./*Block*
do echo mv "$file" "${file//[ ()@$]/_}"
done
Se sei soddisfatto del risultato, rimuovi il echo
prima del mv
per rinominare effettivamente i file.
alla ricerca di una bella sceneggiatura per rimuovere caratteri speciali e caratteri speciali tedeschi, sostituendoli con quelli universali per non rimuovere informazioni utili Ho aggiornato l'ultima versione della sceneggiatura che presentava alcuni problemi minori risultanti in:
#!/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
risultante in:
@don_crissti:Sta facendo gli hokus-pokus con l'infile poiché Linux avrebbe i suoi problemi con la gestione dei caratteri speciali quando si sposta il nome del file.