-n
bendera adalah untuk
--no-act
Tanpa Tindakan:tampilkan file apa yang akan diganti namanya.
Jadi wajar jika tidak ada perubahan.
Mengenai perintah Anda, ini berfungsi untuk saya:
$ touch "a @ test"
$ ls
a @ test
$ rename -n 's/ |\$|@/_/g' *
a @ test renamed as a___test
Mungkin tergantung pada shell Anda, Anda harus keluar dari |
$ rename -n 's/ \|\$\|@/_/g' *
Atau Anda dapat menggunakan […]
notasi untuk mengelompokkan karakter:
$ rename -n 's/[ @\$]/_/g' *
Anda dapat mencoba seperti ini:
for file in ./*Block*
do echo mv "$file" "${file//[ ()@$]/_}"
done
Jika Anda puas dengan hasilnya, hapus echo
sebelum mv
untuk benar-benar mengganti nama file.
mencari skrip yang bagus untuk menghapus karakter khusus serta karakter khusus Jerman, menggantinya dengan yang universal agar tidak menghapus informasi yang berguna. Saya telah memperbarui versi skrip terakhir yang memiliki beberapa masalah kecil yang mengakibatkan:
#!/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
menghasilkan:
@don_crissti:Dia melakukan hokus-pokus dengan infile karena linux akan memiliki masalah sendiri dalam menangani karakter khusus saat memindahkan nama file.