जब आप आदेश जारी करते हैं:
mv *.txt *.tsv
शेल, मान लें कि यदि कोई मेल खाने वाली फाइलें (निर्देशिकाओं सहित) हैं, तो वाइल्डकार्ड का विस्तार करें । फ़ाइलों की सूची कार्यक्रम के लिए यहां दी गई है । यदि कोई मैच नहीं मिला है तो अनएक्सपैंडेड वर्जन पास किया जाता है।mv
दोबारा: शेल पैटर्न का विस्तार करता है, न कि कार्यक्रम का।
उदाहरणों का भार शायद सबसे अच्छा तरीका है, इसलिए यहाँ हम चलते हैं:
उदाहरण 1:
$ ls
file1.txt file2.txt
$ mv *.txt *.tsv
अब mv
लाइन पर क्या होता है कि शेल*.txt
मिलान वाली फाइलों तक फैल जाता है। जैसे कि ऐसी कोई *.tsv
फाइल नहीं है जिसे बदला नहीं गया है।
mv
आदेश में कहा जाता है दो विशेष तर्क के साथ :
argc
: कार्यक्रम सहित तर्कों की संख्या।
argv
: पहली प्रविष्टि के रूप में कार्यक्रम सहित तर्कों की एक सरणी।
उपरोक्त उदाहरण में यह होगा:
argc = 4
argv[0] = mv
argv[1] = file1.txt
argv[2] = file2.txt
argv[3] = *.tsv
यह mv
देखने के लिए कि क्या अंतिम तर्क है, कार्यक्रम *.tsv
एक निर्देशिका है। जैसा कि यह नहीं है, कार्यक्रम जारी नहीं रह सकता है क्योंकि यह फ़ाइलों को संक्षिप्त करने के लिए डिज़ाइन नहीं किया गया है। (आमतौर पर सभी फाइलों को एक में स्थानांतरित करें।) न ही एक निर्देशिका पर निर्देशिका बनाएं।
परिणामस्वरूप यह गर्भपात करता है और त्रुटि की रिपोर्ट करता है:
mv: target ‘*.tsv’ is not a directory
उदाहरण 2:
अब अगर आप इसके बजाय कहते हैं:
$ mv *1.txt *.tsv
mv
कमांड के साथ क्रियान्वित किया जाता है:
argc = 3
argv[0] = mv
argv[1] = file1.txt
argv[2] = *.tsv
अब, फिर mv
से देखें कि क्या *.tsv
मौजूद है या नहीं। जैसा कि यह फ़ाइल file1.txt
को स्थानांतरित नहीं किया गया है *.tsv
। वह यह है: फ़ाइल का नाम बदलकर *.tsv
तारांकन चिह्न और सभी के साथ रखा गया है ।
$ mv *1.txt *.tsv
‘file1.txt’ -> ‘*.tsv’
$ ls
file2.txt *.tsv
उदाहरण 3:
यदि आपने इसके बजाय कहा:
$ mkdir *.tsv
$ mv *.txt *.tsv
mv
कमांड के साथ क्रियान्वित किया जाता है:
argc = 3
argv[0] = mv
argv[1] = file1.txt
argv[1] = file2.txt
argv[2] = *.tsv
जैसा कि *.tsv
अब एक निर्देशिका है, फाइलें समाप्त हो जाती हैं।
अब: some_command *.tsv
जब वास्तव में वाइल्डकार्ड रखने का इरादा हो तो कमांड का उपयोग करना चाहिए। यदि आप कोई मैच होना चाहिए, तो उद्धृत करके आप वाइल्डकार्ड को विस्तारित होने से रोक सकते हैं। जैसे कहो mkdir "*.tsv"
।
उदाहरण 4:
यदि आप उदाहरण के लिए करते हैं, तो विस्तार को देखा जा सकता है:
$ ls
file1.txt file2.txt
$ mkdir *.txt
mkdir: cannot create directory ‘file1.txt’: File exists
mkdir: cannot create directory ‘file2.txt’: File exists
उदाहरण 5:
अब: mv
कमांड कई फाइलों पर काम कर सकता है और कर सकता है। लेकिन अगर वहाँ अधिक है तो दो अंतिम एक लक्ष्य निर्देशिका होना चाहिए। (वैकल्पिक रूप से आप -t TARGET_DIR
विकल्प का उपयोग कर सकते हैं , कम से कम GNU mv के लिए।)
तो यह ठीक है:
$ ls -F
b1.tsv b2.tsv f1.txt f2.txt f3.txt foo/
$ mv *.txt *.tsv foo
यहाँ mv
बुलाया जाएगा:
argc = 7
argv[0] = mv
argv[1] = b1.tsv
argv[2] = b2.tsv
argv[3] = f1.txt
argv[4] = f2.txt
argv[5] = f3.txt
argv[6] = foo
और सभी फाइलें निर्देशिका में समाप्त हो जाती हैं foo
।
अपने लिंक के लिए के रूप में। आपने एक (एक टिप्पणी में) प्रदान की है, जहां mv
बिल्कुल उल्लेख नहीं किया गया है, लेकिन rename
। यदि आपके पास अधिक लिंक हैं तो आप साझा कर सकते हैं। साथ ही साथ मैन पेज के लिए जहाँ आप दावा करते हैं कि यह व्यक्त किया गया है।