Şununla kullan bash:
find $1 -name "* *.xml" -type f -print0 | \
while read -d $'\0' f; do mv -v "$f" "${f// /_}"; done
findadında boşluk bulunan dosyaları arar. Dosya adları, -print0özel dosya adlarıyla da başa çıkmak için sınırlayıcı olarak bir nullbyte ( ) ile yazdırılır . Sonra readyerleşik nullbyte tarafından sınırlanmış dosya adlarını okur ve sonunda mvboşlukları bir alt çizgi ile değiştirir.
EDIT: Dizinlerdeki boşlukları da kaldırmak istiyorsanız, biraz daha karmaşıktır. Dizinler yeniden adlandırılır ve daha sonra ad findbulur tarafından erişilemez . Bunu dene:
find -name "* *" -print0 | sort -rz | \
while read -d $'\0' f; do mv -v "$f" "$(dirname "$f")/$(basename "${f// /_}")"; done
sort -rzBir klasörde en derin dosyalar taşımak için ilk ve klasörün kendisi sonuncu olacak böylece o, dosya sırasını tersine çevirir. Bu nedenle, tüm dosyalar ve klasör yeniden adlandırılmadan önce hiçbir zaman yeniden adlandırılan klasörler yoktur. mvDöngüde komut çok değişti biraz. Hedef adında, yalnızca dosyanın taban adındaki boşlukları kaldırırız, aksi takdirde erişilemez.