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.