GNU/Linux >> Belajar Linux >  >> Linux

Ganti nama file dan direktori secara rekursif di bawah ubuntu / bash

Solusi menggunakan find :

Untuk mengganti nama file saja :

find /your/target/path/ -type f -exec rename 's/special/regular/' '{}' \;

Untuk mengganti nama direktori saja :

find /your/target/path/ -type d -execdir rename 's/special/regular/' '{}' \+

Untuk mengganti nama file dan direktori :

find /your/target/path/ -execdir rename 's/special/regular/' '{}' \+

Jika Anda tidak keberatan memasang alat lain, Anda dapat menggunakan rnm:

rnm -rs '/special/regular/g' -dp -1 *

Itu akan melalui semua direktori/sub-direktori (karena -dp -1 ) dan ganti khusus dengan biasa atas nama mereka.


Jawaban @speakr adalah petunjuk bagi saya.

Jika menggunakan -execdir untuk mengubah file dan direktori, Anda juga ingin menghapus -type f dari contoh yang ditampilkan. Untuk mengejanya, gunakan:

find /your/target/path/ -execdir rename 's/special/regular/' '{}' \+

Juga, pertimbangkan untuk menambahkan g (global) ke regex jika Anda ingin mengganti all kemunculan special dengan regular dalam nama file yang diberikan dan bukan hanya kejadian pertama. Misalnya:

find /your/target/path/ -execdir rename 's/special/regular/g' '{}' \+

akan mengubah special-special.jpg ke regular-regular.jpg . Tanpa flag global, Anda akan mendapatkan regular-special.jpg .

FYI:GNU Rename tidak diinstal secara default di Mac OSX. Jika Anda menggunakan pengelola paket Homebrew, brew install rename akan memperbaiki ini.


Coba lakukan ini (membutuhkan bash --version>=4):

shopt -s globstar
rename -n 's/special/regular/' **

Hapus -n beralih ketika pengujian Anda OK

Ada alat lain dengan nama yang sama yang mungkin atau mungkin tidak dapat melakukan ini, jadi hati-hati.

Jika Anda menjalankan perintah berikut (GNU )

$ file "$(readlink -f "$(type -p rename)")"

dan Anda memiliki hasil seperti

.../rename: Perl script, ASCII text executable

dan tidak mengandung:

ELF

maka ini sepertinya alat yang tepat =)

Jika tidak, untuk menjadikannya default (biasanya sudah terjadi) pada Debian dan turunan seperti Ubuntu :

$ sudo update-alternatives --set rename /path/to/rename

(ganti /path/to/rename ke jalur perl's rename Anda perintah.

Jika Anda tidak memiliki perintah ini, cari manajer paket Anda untuk menginstalnya atau lakukan secara manual

Last but not least, alat ini awalnya ditulis oleh Larry Wall, ayah Perl.


Linux
  1. Temukan File Terbesar Secara Rekursif?

  2. Membuat dan Menghapus File dan Direktori Di Linux

  3. Cara Menemukan dan Menghapus Direktori dan File Kosong di Linux

  1. Temukan file dan direktori terbesar di Linux

  2. Temukan dan salin file

  3. Kapan saya harus menggunakan /dev/shm/ dan kapan saya harus menggunakan /tmp/?

  1. Bagaimana Linux Menangani Beberapa Pemisah Jalur Berturut-turut (/home////username///file)?

  2. Bash =~ Regex Dan Https://regex101.com/?

  3. Cara Menemukan dan Menghapus Direktori dan File Kosong di Unix