मैं सभी .sh एक्सटेंशन को हटाना चाहता था इसलिए ऐसा किया:
ls *.sh | xargs -I {} mv {} `basename {} .sh`
हालाँकि यह काम नहीं करता है, यह basename
रिटर्न अपरिवर्तित फ़ाइल नाम की तरह व्यवहार करता है ।
वह ऐसा व्यवहार क्यों कर रहा है?
उदाहरण के लिए, यह काम करता है:
ls *.sh | xargs -I {} echo `basename {}.jpg .jpg`;
संपादित करें :
समाधान: एकल उद्धरण `basename ...`
कमांड चलने से पहले शेल द्वारा मूल्यांकन को रोकता है।
ls *.sh | xargs -I {} sh -c 'mv {} `basename {} .sh`'
-i
विकल्प से संबंधित डिफ़ॉल्ट नहीं है , लेकिन उन 'क्लासिक' विकल्पों को हटा दिया गया है। उदाहरण के लिए सिर्फ एक विकल्प / लाइन का उपयोग करने के लिए, नया POSIX मैन पेज सुझाता है-L1
। के पुराने व्यवहार को कॉल करने के लिए-i
, पेज-I'{}'
विकल्प की सिफारिश करता है।