GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana Cara Mengganti Nama Banyak File Menggunakan Find?

Saya ingin mengganti nama banyak file (file1 … fileN menjadi file1_rename … fileN_renamed) menggunakan find perintah:

find . -type f -name 'file*' -exec mv filename='{}' $(basename $filename)_renamed ';'

Tetapi mendapatkan kesalahan ini:

mv: cannot stat ‘filename=./file1’: No such file or directory

Ini tidak berfungsi karena nama file tidak ditafsirkan sebagai variabel shell.

Jawaban yang Diterima:

Berikut ini adalah perbaikan langsung dari pendekatan Anda:

find . -type f -name 'file*' -exec sh -c 'x="{}"; mv "$x" "${x}_renamed"' \;

Namun, ini sangat mahal jika Anda memiliki banyak file yang cocok, karena Anda memulai shell baru (yang mengeksekusi mv ) untuk setiap pertandingan. Dan jika Anda memiliki karakter lucu dalam nama file apa pun, ini akan meledak. Pendekatan yang lebih efisien dan aman adalah ini:

find . -type f -name 'file*' -print0 | xargs --null -I{} mv {} {}_renamed

Ini juga memiliki manfaat bekerja dengan file bernama aneh. Jika find mendukungnya, ini dapat dikurangi menjadi

find . -type f -name 'file*' -exec mv {} {}_renamed \;

xargs versi berguna saat tidak menggunakan {} , seperti dalam

find .... -print0 | xargs --null rm

Di sini rm dipanggil sekali (atau dengan banyak file beberapa kali), tetapi tidak untuk setiap file.

Saya menghapus basename dalam pertanyaan Anda, karena mungkin salah:Anda akan memindahkan foo/bar/file8 menjadi file8_renamed , bukan foo/bar/file8_renamed .

Suntingan (seperti yang disarankan dalam komentar):

  • Menambahkan find yang dipersingkat tanpa xargs
  • Menambahkan stiker keamanan

Linux
  1. Bagaimana Cara Mengganti Nama Banyak File Menggunakan Regex?

  2. Cara Mengganti Nama Banyak File Sekaligus di Linux

  3. Cara menyalin banyak file secara bersamaan menggunakan scp

  1. Cara Mengganti Nama File di Linux

  2. Cara Membuat Zip Banyak File di Linux

  3. Bagaimana saya bisa mendaftar hanya file yang tidak kosong menggunakan ls?

  1. Bagaimana Cara Mengganti Nama Banyak File Dalam Satu Perintah Atau Skrip Di Unix??

  2. Bagaimana Menemukan Banyak String Dalam File??

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