Der -n
Flag ist für
--no-act
Keine Aktion:Zeigt an, welche Dateien umbenannt worden wären.
Es ist also normal, wenn Sie keine Änderungen haben.
In Bezug auf Ihren Befehl funktioniert er bei mir:
$ touch "a @ test"
$ ls
a @ test
$ rename -n 's/ |\$|@/_/g' *
a @ test renamed as a___test
Abhängig von Ihrer Shell müssen Sie vielleicht dem |
entkommen$ rename -n 's/ \|\$\|@/_/g' *
Oder Sie können die […]
verwenden Notation zum Gruppieren von Zeichen:
$ rename -n 's/[ @\$]/_/g' *
Du könntest es so versuchen:
for file in ./*Block*
do echo mv "$file" "${file//[ ()@$]/_}"
done
Wenn Sie mit dem Ergebnis zufrieden sind, entfernen Sie echo
vor mv
um die Dateien tatsächlich umzubenennen.
Auf der Suche nach einem ansprechenden Skript, um Sonderzeichen sowie deutsche Sonderzeichen zu entfernen und sie durch universelle zu ersetzen, um keine nützlichen Informationen zu entfernen. Ich habe die letzte Version des Skripts aktualisiert, die einige kleinere Probleme hatte, die zu Folgendem führten:
#!/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
Ergebnis:
@don_crissti:Er macht den Hokuspokus mit dem Infile, da Linux seine eigenen Probleme mit der Behandlung von Sonderzeichen beim Verschieben des Dateinamens haben würde.