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.