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.