Saya mencoba mengubah nama secara rekursif semua file dalam direktori dan subdirektori menjadi huruf kecil tetapi membiarkan nama direktori tidak berubah.
Semua contoh yang saya temukan ganti nama file dan direktori menjadi huruf kecil misalnya:
find ./ -depth -exec rename -n 'y/[A-Z]/[a-z]/' {} ";"
dan
find . -type f|while read f; do mv "$f" "$(echo $f|tr '[:upper:]' '[:lower:]')"; done
Bagaimana saya bisa menjaga direktori tidak berubah tetapi mengganti nama semua file?
-type f
daftar file biasa saja. Direktori tidak terdaftar.-type f
kefind
perintah pertama yang bagi saya terlihat cara paling sederhana, jelas dan lebih mudah diingat untuk melakukannya.Jawaban:
Anda mendapatkan rename pada nama direktori karena
find
perintah mengembalikan path lengkap nama file, kemudian perintah rename dilakukan juga berdasarkan nama direktori. Jadi jika Anda memiliki file di direktoriDIR1/FILE
, itu akan diubah namanya menjadidir1/file
sementara Anda tidak ingin mengganti nama direktori.Berikut adalah perintah untuk mengganti nama hanya nama file:
Dalam perintah di atas,
([^/]*$)
hanya cocok bagian terakhir dari lintasan yang tidak mengandung/
sepasang tanda kurung di(...)
dalamnya yang menjadikan bagian yang cocok sebagai kelompok yang cocok. Kemudian terjemahkan bagian yang cocok ($1
adalah indeks grup yang pertama kali cocok) menjadi huruf kecil denganlc()
fungsi.Pada Anda perlu naik
-n
opsi untuk mengubah nama pada file yang sebenarnya.sumber
-type f
. memperbaikinya. Terima kasih.