-n
příznak je pro
--no-act
Žádná akce:zobrazí soubory, které by byly přejmenovány.
Je tedy normální, pokud nemáte žádné změny.
Pokud jde o váš příkaz, funguje to pro mě:
$ touch "a @ test"
$ ls
a @ test
$ rename -n 's/ |\$|@/_/g' *
a @ test renamed as a___test
Možná v závislosti na vašem shellu budete muset uniknout z |
$ rename -n 's/ \|\$\|@/_/g' *
Nebo můžete použít […]
zápis skupinových znaků:
$ rename -n 's/[ @\$]/_/g' *
Můžete to zkusit takto:
for file in ./*Block*
do echo mv "$file" "${file//[ ()@$]/_}"
done
Pokud jste s výsledkem spokojeni, odstraňte echo
před mv
skutečně přejmenovat soubory.
hledám hezký skript pro odstranění speciálních znaků i německých speciálních znaků, jejich nahrazením univerzálními, aby se neodstranily užitečné informace Aktualizoval jsem poslední verzi skriptu, která měla drobné problémy, které vedly k:
#!/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
výsledkem je:
@don_crissti:Dělá hokus-pokus s infile, protože linux by měl vlastní problémy se speciálními znaky při přesunu názvu souboru.