Perhatikan bahwa Anda menggunakan skrip Perl yang disebutrename didistribusikan oleh Debian dan turunannya (Ubuntu, Mint, ...). Distribusi Linux lainnya mengirimkan perintah yang sama sekali berbeda, dan sangat tidak berguna, disebut rename.
y/A-Z/a-z/menerjemahkan setiap karakter dalam kisaran Amelalui Zke dalam sesuai karakter dalam kisaran amelalui z, yaitu ASCII huruf besar huruf ke huruf kecil yang sesuai. Untuk melakukan terjemahan yang berlawanan, gunakan y/a-z/A-Z/. Cara lain untuk menulis perintah yang sama adalah rename '$_ = uc($_)' *- ucadalah fungsi u pper c ase, dan renameperintah mengganti nama file berdasarkan transformasi yang dibuat ke $_variabel.
rename '…' *hanya mengganti nama file di direktori saat ini, karena itulah yang *cocok. File dot (file yang namanya dimulai dengan .) dilewati juga.
Jika Anda ingin mengganti nama file di direktori saat ini dan di subdirektori secara rekursif, Anda dapat menggunakan findperintah untuk melintasi direktori saat ini secara rekursif. Ada kesulitan di sini: jika Anda menelepon rename, ini mengganti nama direktori dan bagian nama dasar. Jika Anda memanggil renamedirektori sebelum berulang ke dalamnya ( find -exec rename … {} \;), findmenjadi bingung karena menemukan direktori tetapi direktori itu tidak ada lagi pada saat ia mencoba turun ke dalamnya. Anda bisa menyiasatinya dengan mengatakan finduntuk melintasi direktori sebelum bertindak di atasnya, tapi kemudian Anda berakhir mencoba untuk mengubah nama foo/barke FOO/BARtetapi direktori FOOtidak ada.
Cara sederhana untuk menghindari kesulitan ini adalah membuat perintah pengubahan nama hanya bertindak pada bagian nama dasar dari path. Ekspresi reguler ([^/]*\Z)cocok dengan bagian akhir dari jalur yang tidak mengandung a /.
find . -depth -exec rename 's!([^/]*\Z)!uc($1)!e' {} +
Shell zsh menyediakan fitur yang lebih nyaman untuk penggantian nama - bahkan lebih samar dari Perl, tetapi lebih singkat dan seringkali lebih mudah untuk dikomposisi.
Fungsi zmvmengubah nama file berdasarkan pola. Jalankan autoload -U zmvsekali untuk mengaktifkannya (masukkan baris ini di Anda .zshrc).
Dalam argumen pertama ke zmv(pola untuk mengganti), Anda dapat menggunakan pola wildcard zsh yang kuat . Dalam argumen kedua ke zmv(teks pengganti), Anda dapat menggunakan fitur ekspansi parameternya , termasuk pengubah riwayat .
zmv -w '**/*' '$1$2:u'
Penjelasan:
-w - Otomatis menetapkan variabel numerik untuk setiap pola wildcard
**/*- semua file dalam subdirektori, secara rekursif ( **/cocok dengan 0, 1 atau lebih level subdirektori)
$1 - variabel numerik pertama, di sini cocok dengan bagian direktori dari setiap jalur
$2:u- variabel numerik kedua, di sini mencocokkan bagian nama dasar dari setiap jalur, dengan :upengubah untuk mengkonversi nilai menjadi huruf besar
Sebagai bonus tambahan, ini menghormati pengaturan lokal sekitar.
Jika Anda tidak yakin tentang zmvperintah yang Anda tulis, Anda dapat memberikan -nopsi untuk mencetak apa yang akan dilakukan perintah dan tidak mengubah apa pun. Periksa output, dan jika itu melakukan apa yang Anda inginkan, jalankan kembali perintah tanpa -nbenar-benar bertindak.
rename 'y/a-z/A-Z/' *Anda akan mendapatkan apa yang Anda inginkan. Hati-hati saat Anda mengujinya.