वन-लाइनर जिसे आसानी से सीधे टर्मिनल से टाइप किया जा सकता है:
for f in *.md; do mv "$f" "test - $f"; done
या अर्धविरामों का उपयोग करने के बजाय अलग-अलग लाइनों पर फिर से लिखा गया:
for f in *.md
do
mv "$f" "test - $f"
done
प्रदर्शनी
सिंटैक्स for(में sh):
for NAME [in WORDS ... ] ; do COMMANDS; done
इधर, हमारे NAMEहै fऔर हमारे WORDSवर्तमान निर्देशिका मिलान में सभी फाइलों रहे हैं *.md। इसलिए चर $fको प्रत्येक फ़ाइल मिलान के साथ प्रतिस्थापित किया जाएगा *.md।
तो इसके लिए a.md:
mv "$f" "test - $f"
हो जाता है
mv "a.md" "test - a.md"
उद्धरण महत्वपूर्ण हैं क्योंकि प्रत्येक फ़ाइल नाम $fमें स्थान हो सकते हैं। अन्यथा mvप्रत्येक शब्द एक अलग फ़ाइल होती। उदाहरण के लिए, यदि कोई उद्धरण नहीं था, और एक फ़ाइल है Foo Bar.md, जिसे यह कहा जाएगा:
mv Foo Bar.md test - Foo Bar.md
जो इरादा के रूप में काम नहीं करेगा। लेकिन $fउद्धरण में लपेटकर , यह समझ में आता है:
mv "Foo Bar.md" "test - Foo Bar.md"
के सिंटैक्स को ध्यान में रखते हुए for, आप *.mdस्पष्ट रूप से नामकरण करके सभी फाइलों के एक सबसेट का नाम बदल सकते हैं :
for f in a.md b.md d.md; do mv "$f" "Test - $f"; done
या शेल विस्तार का उपयोग करना:
for f in {a,b,d}.md; do mv "$f" "Test - $f"; done