इसके साथ इसका प्रयोग करें bash
:
find $1 -name "* *.xml" -type f -print0 | \
while read -d $'\0' f; do mv -v "$f" "${f// /_}"; done
find
नाम में एक जगह के साथ फ़ाइलों के लिए खोज करेंगे। फाइलनामों को एक नलबीट ( -print0
) के रूप में मुद्रित किया जाएगा जो विशेष फिल्टनाम के साथ सामना करने के लिए सीमांकक के रूप में होगा। तब read
बिलिन नलिन द्वारा सीमांकित फाइलनाम पढ़ता है और अंत में mv
एक अंडरस्कोर के साथ रिक्त स्थान को बदल देता है।
संपादित करें: यदि आप निर्देशिकाओं में रिक्त स्थान भी निकालना चाहते हैं, तो यह थोड़ा अधिक जटिल है। निर्देशिकाओं का नाम बदल दिया जाता है और फिर नाम से सुलभ नहीं होता find
है। इसे इस्तेमाल करे:
find -name "* *" -print0 | sort -rz | \
while read -d $'\0' f; do mv -v "$f" "$(dirname "$f")/$(basename "${f// /_}")"; done
sort -rz
फ़ाइल क्रम उलट जाता है, तो यह है कि एक फ़ोल्डर में गहरी फ़ाइलें पहले स्थानांतरित करने के लिए और फ़ोल्डर को स्वयं पिछले एक हो जाएगा रहे हैं। इसलिए, सभी फ़ाइलों और फ़ोल्डर का नाम बदलकर उसके अंदर नाम बदलने से पहले कभी भी फ़ोल्डर का नाम नहीं लिया जाता है। mv
पाश में आदेश एक सा भी बदल रहा है। लक्ष्य नाम में, हम केवल फ़ाइल के बेसनेम में रिक्त स्थान हटाते हैं, अन्यथा यह सुलभ नहीं होगा।