GNU/Linux >> Belajar Linux >  >> Linux

Mengganti nama banyak file di Linux sesuai dengan pola

Saya belum mengujinya, jadi saya menaruh echo di depan perintah sehingga Anda dapat mencobanya sebelum menghapus gema untuk menjalankannya secara nyata.

  1. for f in *v9.zip; do echo mv "${f}" "${f%v9.zip}.zip"; done
    
  2. 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.


Linux
  1. Ganti Nama Semua File dan Nama Direktori menjadi Huruf Kecil di Linux

  2. Cara Mengganti Nama File di Linux

  3. Metamorphose 2 – Batch Ganti Nama File dan Folder Anda di Linux

  1. Cara Mengganti Nama Banyak File Bersama di Linux Menggunakan 3 Metode

  2. Menghapus bagian dari nama file untuk banyak file di Linux

  3. Mengganti nama file di linux dengan regex

  1. Temukan banyak file dan ganti namanya di Linux

  2. Linux mengganti nama file menjadi huruf besar

  3. Ganti nama file secara rekursif (ubah ekstensi) di Linux