जब आप आदेश जारी करते हैं:
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। यदि आपके पास अधिक लिंक हैं तो आप साझा कर सकते हैं। साथ ही साथ मैन पेज के लिए जहाँ आप दावा करते हैं कि यह व्यक्त किया गया है।