cp या mv फ़ाइलों को उसी डायरेक्टरी में ले जाते हैं जब वे दूसरे में होते हैं।


12

अगर मैं अंदर ~/blobहूं और मेरे पास एक फाइल है~/blob/a_long_directory_name/c/x.x

मैं टाइप कर सकता हूँ

mv blob/a_long_directory_name/c/x.x blob/a_long_directory_name/even_more/y.y

क्या ऐसा कोई शॉर्टकट है जिससे मैं पहले पैराम में निर्देशिका पथ का उपयोग करने वाले कुछ को टाइप कर सकता हूं (हालांकि मेरी वर्तमान निर्देशिका नहीं है), उदाहरण के लिए

mv blob/a_long_directory_name/c/x.x $same_dir/y.y

जहां कुछ इस तरह $same_dirइंगित करता है कि परम 1 की dir

जवाबों:


8

टाइपिंग की मात्रा को कम करने के लिए, इसे दो चरणों में करना संभव है। निर्देशिका में सीडी, फिर स्थानांतरित करें।

यदि आपके पास केवल एक आदेश है, तो आप एक उप-भाग का उपयोग कर सकते हैं:

$ (cd blob/a_long_directory_name/c/ && mv x.x y.y )

इसका मतलब है कि cdवसीयत में केवल प्रभाव mvहोगा , यह तभी होगा जब cdसफल होगा, और आपके वर्तमान शेल की कार्यशील निर्देशिका नहीं बदलेगी।

यदि आपके पास एक से अधिक कमांड हैं, तो निर्देशिका स्टैक का उपयोग करें।

$ pushd blob/a_long_directory_name/c/
$ mv x.x y.y
$ mv z.z q.q
$ popd

यह even_moreसापेक्ष पथ को संबोधित नहीं करता है ...
बेकार

वह सही है। $ Same_dir उदाहरण के रूप में अच्छी तरह से इसे अनदेखा करने के लिए लग रहा था।
एलन शटको

+1 मुझे अच्छा लगता है। याद रखना और करना बहुत आसान है और वह मेरे लिए महत्वपूर्ण है
माइकल ड्यूरेंट

दिलचस्प है, क्योंकि यह वह नहीं करता है जो आपने पूछा था। हो सकता है कि आपका सवाल ठीक वैसा न हो जैसा आपने इरादा किया था?
बेकार

बेकार, मैंने अपने शीर्षक को स्पष्ट करने के लिए अद्यतन किया कि यह cp / mv फ़ाइलों के बारे में है और उन्हें उसी निर्देशिका में रखें, भले ही मैं दूसरे में हूं। btw आपका उपयोगकर्ता नाम प्यारा है, लेकिन यह उन में इस्तेमाल किए जाने पर टिप्पणियों को मूर्खतापूर्ण बनाता है :)
माइकल ड्यूरेंट


5

आप अपने शेल की पाठ प्रतिस्थापन क्षमताओं का उपयोग कर सकते हैं। में bash, आप एक जानवर का उपयोग कर सकते हैं जैसे:

mv blob/a_long_directory_name/c/xx !#:$:gs^c/xx^evenmore/yy

इसे तोड़ने के लिए:

!# अब तक टाइप की गई वर्तमान लाइन है

:$विचाराधीन ( इस मामले में) स्ट्रिंग के अंतिम शब्द (संख्या nको लेने के लिए n'वें शब्द) को लेने के लिए कहता है !#। अब तक टाइप की गई लाइन का आखिरी शब्द पिछला शब्द होगा।

:gs^xx^yyपरिणामी शब्द पर वैश्विक ( g) पाठात्मक प्रतिस्थापन ( s), 'xx' को 'yy' से बदल देता है। आपके पैटर्न का उपयोग करने की अनुमति देने के ^लिए केवल एक सीमांकक है ।s/

यह विधि थोड़ी अधिक सामान्य है क्योंकि यह आपको पथ के किसी भी भाग ('xx') को किसी अन्य शब्द ('yy') से बदलने देती है।

अंत में, किसी भी इतिहास हेरफेर के साथ, उपयुक्त शेल विकल्प सेट (जैसे ~/.bashrc) करना अच्छा है। इस मामले में

shopt -s histverify

वापसी के बाद आप संपादित लाइन प्रदर्शित करेंगे, ताकि आप अभी भी इसे संपादित कर सकें और त्रुटियों की जाँच कर सकें।

आप एक निर्माण का उपयोग क्यों करेंगे जैसे कि मुझे यकीन नहीं है, लेकिन यह इस मामले में काम करता है।


ए) बहुत अधिक लाइन शोर (एक सुरुचिपूर्ण ब्रेस विस्तार की तुलना में) बी) ओपी की समस्या को हल नहीं करता है: वे मूल पथ उपसर्ग रखने के c/x.xसाथ बदलना चाहते हैं evenmore/y.y
जोसेफ आर।

आपकी दूसरी टिप्पणी मेरी ओर से एक साधारण चूक थी, जिसे ठीक करने के लिए एक सरल संपादन की आवश्यकता थी। मैं यह नहीं देखता कि यह उत्तर किस तरह से एक अपमानजनक है। संपादन (तकनीकी) के साथ, यह समस्या को हल करता है और अधिक सामान्य है क्योंकि यह पथ के किसी भी हिस्से को स्वैप करने की अनुमति देता है (मैं अक्सर कुछ इसी तरह का उपयोग करता था $PWD)। बेशक, शायद यह सबसे सुरुचिपूर्ण नहीं है, लेकिन यह इस तथ्य की ओर इशारा करता है कि शेल में पाठीय प्रतिस्थापन और शब्द डिज़ाइनर हैं, जो कुछ उपयोगकर्ता अभी भी शोध के लिए उपयोगी हो सकते हैं।
वोजटेक

ठीक। मुझे सही साबित होना है।
जोसेफ आर।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.