Saya sedang mengerjakan konversi situs web. File-file saat mereka ditautkan dan disajikan dari server web tidak peka huruf besar-kecil. Tapi, saya sudah membuat dump situs di sistem linux saya dan saya menulis skrip untuk memigrasikan data. Masalahnya adalah bahwa saya mengalami masalah sensitivitas case antara string tautan di halaman dan case word aktual pada sistem file.
Misalnya, halaman mungkin memiliki tautan seperti <a href='/subfolder/PageName.asp'>
saat file yang sebenarnya berada /subfolder/pagename.asp
. Begitu juga dengan gambar - <img src='spacer_sm.gif'>
mungkin Spacer_Sm.gif
.
Jadi pemikiran saya adalah mengubah semua direktori dan nama file menjadi setara dengan huruf kecil untuk unduhan situs. Bagaimana saya melakukan ini (dan mungkin ada cara yang lebih baik?)
Bahkan jika ada perintah unix yang memiliki saklar case-insensitve, saya menggunakan php, jadi tidak semua perintah filesystem di sana memiliki opsi untuk sensitivitas case.
sumber
Jawaban:
Saya tidak tahu apakah rasa unix Anda memiliki
rename
. Banyak Linux memiliki, dan itu adalah bagian dari paket perl, jika Anda mencari repositori.Versi di atas dengan
tidak benar-benar melakukan tindakan, tetapi hanya mencetak apa yang akan dilakukan. Anda menghilangkan -n untuk melakukannya secara nyata.
sumber
'y/[A-Z]/[a-z]/'
bagiannya?rename
ini adalah bagian dariperl
paket, saya kira perl, tetapi polanya digunakansed
juga, dan mungkinAWK
juga. Saya hanya tahu dengansed
tenang. Saya menerjemahkany
ketranslate
ataumap
, tetapi saya tidak tahu dari mana karakter itu berasal.rename
adalah skrip perl.Zsh
Penjelasan:
zmv
mengganti nama file yang cocok dengan pola sesuai dengan teks pengganti yang diberikan.-o-i
melewati-i
opsi untuk setiapmv
perintah di bawah tenda (lihat di bawah). Dalam teks pengganti,$1
,$2
, dll, adalah kelompok kurung berturut-turut dalam pola.**
berarti semua (sub) * direktori, secara rekursif. Final(/)
bukan grup kurung tetapi kualifikasi global yang berarti hanya cocok dengan direktori.${2:l}
dikonversi$2
ke huruf kecil.Perl mengganti nama
Di sini saya menggunakan skrip rename Perl yang dikirimkan oleh Debian dan Ubuntu
/usr/bin/prename
(biasanya juga tersediarename
). Dengan bash ≥4 atau zsh:Dengan kerang lain:
Portable
Secara rekursif:
Penggunaan
-depth
memastikan bahwa direktori yang sangat bersarang diproses sebelum leluhur mereka.sumber
Itu tidak berfungsi pada struktur direktori berikut:
Berikut ini contoh yang berfungsi:
Untuk penjelasan
b
dane
vars:Kemudian gunakan urutan tombol berikut: /,,Enterbb
sumber
Jawaban yang diterima tidak berhasil bagi saya karena mencoba mengubah semua direktori sekaligus. Saya menemukan solusi lain pada stackexchange yang sangat mirip dengan yang portabel dari Gilles di atas: dari Baramin -
/programming/4268591/unix-rename-files-directories-to-uppercase
Saya sudah menyalinnya di sini:
Saya mengubah perintah tr yaitu: sed s / cat / dog / g
Terima kasih kepada Baramin di tautan di atas.ie
sumber