क्या mvदूसरे तर्क में पूर्ण पथ को टाइप किए बिना कमांड निष्पादित करने का कोई तरीका है ?
उदाहरण:
mv my/file/that/has/a/really/long/path/foo.bar some_magic_operator_that_means_the_same_directory/foo.baz
क्या mvदूसरे तर्क में पूर्ण पथ को टाइप किए बिना कमांड निष्पादित करने का कोई तरीका है ?
उदाहरण:
mv my/file/that/has/a/really/long/path/foo.bar some_magic_operator_that_means_the_same_directory/foo.baz
जवाबों:
आप बैश के ब्रेस विस्तार का उपयोग कर सकते हैं। इस:
mv my/file/that/has/a/really/long/path/foo.{bar,baz}
में विस्तार होगा:
mv my/file/that/has/a/really/long/path/foo.bar my/file/that/has/a/really/long/path/foo.baz
और फिर mvउन दो तर्कों के साथ चलाया जाता है। ब्रेस विस्तार पर अधिक जानकारी के लिए http://wiki.bash-hackers.org/syntax/expansion/brace देखें ।
ब्रेस विस्तार के विकल्प के रूप में, आप बैश शेल के इतिहास विस्तार सुविधाओं का उपयोग कर सकते हैं :
! एक इतिहास विस्तार का परिचय देता है# इवेंट डिज़ाइनर वर्तमान कमांड को दर्शाते हुए$ अंतिम तर्क का जिक्र करते हुए शब्द रचनाकार आप एक सेड जैसे s/pattern/replacementसिंटैक्स का उपयोग करके विस्तार पर प्रतिस्थापन कर सकते हैं
somecommand path/to/foo.bar !#$:s/.bar/.baz
पूर्व।
$ mv -v somepath/Original/Dir3/SubDir1/foo.bar !#$:s/.bar/.baz
mv -v somepath/Original/Dir3/SubDir1/foo.bar somepath/Original/Dir3/SubDir1/foo.baz
'somepath/Original/Dir3/SubDir1/foo.bar' -> 'somepath/Original/Dir3/SubDir1/foo.baz'
यदि आप विशेष रूप से पथ चाहते हैं (उदाहरण के लिए, mvएक फ़ाइल के लिए एक पूरी तरह से अलग नाम जो प्रतिस्थापन द्वारा आसानी से प्राप्त नहीं होता है), तो आप hसंशोधक का उपयोग कर सकते हैं :
$ mv -v somepath/Original/Dir3/SubDir1/foo.baz !#$:h/baz.foo
mv -v somepath/Original/Dir3/SubDir1/foo.baz somepath/Original/Dir3/SubDir1/baz.foo
'somepath/Original/Dir3/SubDir1/foo.baz' -> 'somepath/Original/Dir3/SubDir1/baz.foo'
readlineअंतिम तर्क को yank करने के लिए कुंजी संयोजनों सहित अन्य विकल्पों के लिए, देखें कि वर्तमान में bash कंसोल पर पैरामीटर में टाइप कैसे दोहराएं?
`DIR=./really/long/path/mv "$DIR"foo.bar "$DIR"foo.bzएक पंक्ति में: DIR=./really/long/path/; mv "$DIR"foo.bar "$DIR"foo.bz
cdउस निर्देशिका में भी जा सकते हैं जिसमें आप काम करना चाहते हैं:cd ./really/long/pathmv foo.bar foo.bzएक पंक्ति में: cd ./really/long/path && mv foo.bar foo.bz
&&उस आखिरी वन-लाइनर में सबसे अच्छा उपयोग । अन्यथा, यदि cdविफल रहता है, mvतो गलत निर्देशिका में चलाया जाएगा, संभवतः एक फ़ाइल को ओवरराइट कर रहा है। के साथ cd ./really/long/path && mv foo.bar foo.baz, mvकेवल चलाया जाएगा यदि cdनिर्देशिका बदलने में सफल होता है।
cdनिर्देशिका औरmvवहाँ से नहीं जा सकते ?