Gunakan ini dengan bash:
find $1 -name "* *.xml" -type f -print0 | \
while read -d $'\0' f; do mv -v "$f" "${f// /_}"; done
findakan mencari file dengan spasi di namanya. Nama file akan dicetak dengan nullbyte ( -print0) sebagai pembatas untuk mengatasi nama file khusus. Kemudian readbuiltin membaca nama file yang dibatasi oleh nullbyte dan akhirnya mvmengganti 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 findditemukan. Coba ini:
find -name "* *" -print0 | sort -rz | \
while read -d $'\0' f; do mv -v "$f" "$(dirname "$f")/$(basename "${f// /_}")"; done
The sort -rzmembalikkan 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 mvperintah dalam loop adalah sedikit berubah juga. Dalam nama target, kami hanya menghapus spasi di nama file, jika tidak, file tersebut tidak dapat diakses.