Saya belum mengujinya, jadi saya menaruh echo
di depan perintah sehingga Anda dapat mencobanya sebelum menghapus gema untuk menjalankannya secara nyata.
for f in *v9.zip; do echo mv "${f}" "${f%v9.zip}.zip"; done
for f in *_*; do echo mv "${f}" "${f//_/-}"; done
Adapun masalah ketiga Anda, saya yakin itu bisa dilakukan juga, tetapi mungkin pendekatan yang lebih canggih daripada shell one-liner mentah akan membantu, seperti yang disebutkan @tchrist.
Ada rename
perintah yang disediakan dengan sebagian besar distro berbasis Debian/Ubuntu yang ditulis oleh Robin Barker berdasarkan kode asli Larry Wall dari sekitar tahun 1998(!).
Berikut kutipan dari dokumentasi:
"rename" renames the filenames supplied according to the rule specified as the first argument. The perlexpr argument is a Perl expression which is expected to modify the $_ string in Perl for at least some of the filenames specified. If a given filename is not modified by the expression, it will not be renamed. If no filenames are given on the command line, filenames will be read via standard input. For example, to rename all files matching "*.bak" to strip the extension, you might say rename 's/\.bak$//' *.bak To translate uppercase names to lower, you'd use rename 'y/A-Z/a-z/' *
Ini menggunakan perl sehingga Anda dapat menggunakan ekspresi perl untuk mencocokkan polanya, sebenarnya saya yakin ini berfungsi seperti skrip tchrist.
Satu set alat lain yang sangat berguna untuk penggantian nama file massal adalah koleksi renameutils oleh Oskar Liljeblad. Kode sumber dihosting oleh Free Software Foundation. Selain itu banyak distro (terutama distro berbasis Debian/Ubuntu) memiliki renameutils
paket dengan alat ini.
Di salah satu distro tersebut Anda dapat menginstalnya dengan:
$ sudo apt-get install renameutils
Dan kemudian untuk mengganti nama file, jalankan saja perintah ini:
$ qmv
Ini akan membuka editor teks dengan daftar file, dan Anda dapat memanipulasinya dengan fungsi pencarian dan penggantian editor Anda.
Solusi favorit saya adalah ganti nama saya sendiri naskah. Contoh paling sederhana yang memetakan masalah Anda adalah sebagai berikut:
% rename 's/_/-/g' *
% rename 's/(\p{Lower})(\p{Upper})/$1 $2/g' *
Meskipun saya sangat membenci spasi putih di nama file saya, terutama spasi putih vertikal:
% rename 's/\s//g' *
% rename 's/\v//g' *
dan lain-lain. Ini didasarkan pada skrip oleh The Larry Wall, tetapi diperluas dengan opsi, seperti di:
usage: /home/tchrist/scripts/rename [-ifqI0vnml] [-F file] perlexpr [files]
-i ask about clobbering existent files
-f force clobbers without inquiring
-q quietly skip clobbers without inquiring
-I ask about all changes
-0 read null-terminated filenames
-v verbosely says what its doing
-V verbosely says what its doing but with newlines between old and new filenames
-n don't really do it
-m to always rename
-l to always symlink
-F path read filelist to change from magic path(s)
Seperti yang Anda lihat, itu tidak hanya dapat mengubah nama file, tetapi di mana tautan simbolik menunjuk menggunakan pola yang sama. Anda tidak harus menggunakan s///
pola, meskipun sering terjadi.
Alat lain dalam direktori tersebut sebagian besar untuk pekerjaan Unicode, yang mana ada beberapa yang sangat berguna.