Gunakan ini dengan bash
:
find $1 -name "* *.xml" -type f -print0 | \
while read -d $'\0' f; do mv -v "$f" "${f// /_}"; done
find
akan mencari file dengan spasi di namanya. Nama file akan dicetak dengan nullbyte ( -print0
) sebagai pembatas untuk mengatasi nama file khusus. Kemudian read
builtin membaca nama file yang dibatasi oleh nullbyte dan akhirnya mv
mengganti spasi dengan garis bawah.
EDIT: Jika Anda ingin menghapus spasi di direktori juga, ini sedikit lebih rumit. Direktori diubah namanya dan kemudian tidak lagi dapat diakses oleh namanya find
ditemukan. Coba ini:
find -name "* *" -print0 | sort -rz | \
while read -d $'\0' f; do mv -v "$f" "$(dirname "$f")/$(basename "${f// /_}")"; done
The sort -rz
membalikkan memesan berkas, sehingga file terdalam di folder adalah yang pertama untuk bergerak dan folder itu sendiri akan menjadi yang terakhir. Jadi, tidak pernah ada folder yang diganti namanya sebelum semua file dan folder diubah namanya di dalamnya. The mv
perintah dalam loop adalah sedikit berubah juga. Dalam nama target, kami hanya menghapus spasi di nama file, jika tidak, file tersebut tidak dapat diakses.
find . -name "* *" -print0 | sort -rz | \ while read -d $'\0' f; do mv -v "$f" "$(dirname "$f")/$(basename "${f// /_}")"; done
Menggunakan
rename
atau dengan
$1
Menggunakan
mv
atau dengan
$1
sumber
Ini adalah metode yang saya temukan saat menghadapi masalah yang sama:
Saya sedang menulis file skrip bash untuk secara otomatis memperbarui sertifikat ssl saya.
sumber
Gunakan
rename
:Tidak perlu
find
:)sumber