Anda dapat secara eksplisit meneruskan string kosong sebagai argumen.
rename .old '' *.old
Dan dengan subfolder, find . -type d -exec rename .old '' {}/*.old \; . {} adalah pengganti entri yang ditemukan dengan find , dan \; mengakhiri arglist untuk perintah yang diberikan setelah -exec .
rename sedikit berbahaya, karena menurut halaman manualnya:
rename akan mengganti nama file yang ditentukan dengan mengganti pertama terjadinya...
Itu akan dengan senang hati melakukan hal yang salah dengan nama file seperti c.txt.parser.y .
Inilah solusi menggunakan find dan bash :
find -type f -name '*.txt' | while read f; do mv "$f" "${f%.txt}"; done
Ingatlah bahwa ini akan rusak jika nama file berisi baris baru (jarang, tetapi bukan tidak mungkin).
Jika Anda menemukan GNU, ini adalah solusi yang lebih solid:
find -type f -name '*.txt' -print0 | while read -d $'\0' f; do mv "$f" "${f%.txt}"; done
Saya menggunakan ini:
find ./ -name "*.old" -exec sh -c 'mv $0 `basename "$0" .old`.new' '{}' \;
Versi ganti nama Perl dapat menghapus ekstensi sebagai berikut:
rename 's/\.txt$//' *.txt
Ini dapat digabungkan dengan find untuk juga melakukan sub-folder.