वन-लाइनर जिसे आसानी से सीधे टर्मिनल से टाइप किया जा सकता है:
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