चाल कार्रवाई के लक्ष्य के लिए निर्देशिका बदलें


12

कभी-कभी, मैंने कुछ फ़ाइल को संपादित किया है और इसे एक अलग फ़ोल्डर में ले जाना चाहता हूं। (आमतौर पर: एक ड्रॉपबॉक्स फ़ोल्डर में, जहां मैं फ़ोल्डर के अन्य मालिकों को लगातार अपडेट देने से बचने के लिए काम नहीं करना चाहता था।) मैं, उदाहरण के लिए, ऐसा करता हूं।

mv file.pdf ../../../Dropbox/sharedfolder/subdirectory/file.pdf

बाद में, मैं अक्सर अपने आप को अपनी पिछली चाल कार्रवाई की निर्देशिका निर्देशिका में बदलना चाहता हूं। मैं अपने आप को ऊपर तीर मार रहा हूँ, अंतिम हटाने file.pdf, छोड़ दिया पकड़, हटाने mv file.pdfऔर इसके साथ की जगह cd

क्या ऐसा करने का एक तेज़, स्मार्ट तरीका है? क्या "चाल फ़ाइल है और फिर निर्देशिका को" कमांड, या अंतिम प्रयुक्त निर्देशिका के लिए एक शॉर्टकट, या ऐसा कुछ है?


1
अगर आप CTRL + Left पकड़ते हैं, तो यह शब्द के द्वारा बाएँ जाएगा जो कि तेज़ है
cat

साइड कमेंट, आपके शेल प्रश्न का उत्तर नहीं: मैं आमतौर पर संपादन करते समय ड्रॉपबॉक्स को रोक देता हूं। यह यह भी सुनिश्चित करता है कि कोई अन्य फाइल "मेरे पैरों के नीचे" न बदले।
कॉन्स्टैंटिनो त्सारोहस

जवाबों:


17

यदि आप बैश का उपयोग कर रहे हैं, तो इसके इतिहास इंटरैक्शन में इसके लिए सिर्फ शॉर्टकट है। शब्द डेसिग्नेटर पिछला आदेश की अंतिम तर्क के लिए:

!!:$
पूर्ववर्ती आदेश का अंतिम तर्क निर्दिष्ट करता है। इसे छोटा किया जा सकता है !$

अंतिम पथनाम घटक को हटाने के लिए एक संशोधक के साथ संयुक्त :

वैकल्पिक शब्द पदनाम के बाद, आप एक या एक से अधिक वैध संशोधक का अनुक्रम जोड़ सकते हैं , प्रत्येक ':' से पहले होगा।

h
केवल सिर को छोड़कर, एक ट्रेलिंग पाथनाम घटक निकालें।

इसलिए:

$ echo /ab/c/d
/ab/c/d
$ echo !$:h
echo /ab/c
/ab/c

उसी शॉर्टकट का उपयोग zsh के साथ भी किया जा सकता है।


1
यह बहुत अच्छा है।
एल्डर गीक

4

यदि आप फ़ाइल नाम नहीं बदल रहे हैं, तो आप इसे छोड़ सकते हैं और mv इसे स्वचालित रूप से जोड़ देगा; कई फ़ाइलों को स्थानांतरित करते समय यह विशेष रूप से उपयोगी है:

mv file.pdf ../../../Dropbox/sharedfolder/subdirectory/

mv *.pdf ../../../Dropbox/sharedfolder/subdirectory/

अंतिम तर्क के रूप में निर्देशिका के साथ, आप उपयोग कर सकते हैं !!:$या !$मुरु के उत्तर का वर्णन कर सकते हैं ।
यदि आप सामान्य चूक के साथ बैश का उपयोग कर रहे हैं, तो आप इसके बजाय Alt+ का उपयोग कर सकते हैं .
(यह रीडलाइन insert-last-argumentकमांड है; bind -pआपके सभी वर्तमान बाइंडिंग को सूचीबद्ध करेगा।)


1
ध्यान दें कि डेस्टिनेशन फ़ाइल नाम को छोड़ने पर गंतव्य फ़ाइल को चुपचाप अधिलेखित कर दिया जा सकता है यदि यह पहले से मौजूद है
बिल्ली

mvहमेशा गंतव्य फ़ाइलों को अधिलेखित कर देता चुपचाप जब तक आप विकल्प निर्दिष्ट -i/ --interactiveया -n/ --no-clobber। इसलिए alias mv='mv -i' cp='cp -i'मेरे अंदर है .bashrc
डेविड फोएस्टर

-1

एक और तरीका यह है कि इस उद्देश्य के लिए अपनी खुद की कमांड समर्पित करें। इसे फंक्शन के माध्यम से किया जा सकता है जो इस तरह दिख सकता है:

$ function mv-special { mv $1 $2; cd $(dirname $(echo $2-)); }

कहां: (1) mv-special फ़ंक्शन का नाम है; (2) चर $1और $2फ़ंक्शन में तर्क हैं जो कमांड द्वारा उपयोग किए जाएंगे mvऔर cd; (3) $(echo $2-) var में स्ट्रिंग के अंत में एक वाइल्डकैट वर्ण जोड़ता है $2, और व्यवहार को ठीक करता है dirnameयदि चर $2में केवल पथ होता है; (4) $(dirname $(echo $2-)) से केवल पथ फ़िल्टर करेगा $2

इस उत्तर के अनुसार फ़ंक्शन ऐसा लग सकता है:

$ function mv-special { mv $1 $2; cd ${2%/*}; }

कहां: ${2%/*}केवल रास्ते से फिल्टर करेगा $2

कमांड के रूप में उपलब्ध होने के लिए यह फ़ंक्शन निर्यात किया जाना चाहिए :

$ export -f mv-special

उपयोग:

$ mv-special file.pdf ../../../Dropbox/sharedfolder/subdirectory/file.pdf

या:

$ mv-special file.pdf ../../../Dropbox/sharedfolder/subdirectory/

कृपया उस पर ध्यान दें - दोनों प्रकारों के लिए - दूसरा तर्क ( $2) फ़ाइलनाम या स्लैश ( /) के साथ पूरा होना चाहिए ।

हमारे नए कमांड स्थायी रूप से उपलब्ध होने के लिए, फ़ंक्शन और एक्सपोर्ट कमांड की परिभाषा को संलग्न किया जाना चाहिए ~/.bashrc:

# My custom 'mv-special' command:
function mv-special { mv $1 $2; cd $(dirname $(echo $2-)); }
export -f mv-special

या:

# My custom 'mv-special' command:
function mv-special { mv $1 $2; cd ${2%/*}; }
export -f mv-special

यहाँ छवि विवरण दर्ज करें


कस्टम कमांड बनाया जा सकता है और निष्पादन योग्य स्क्रिप्ट फ़ाइल के माध्यम से जो इसमें रखा गया ~/binहै /usr/sbin: मैं कस्टम टर्मिनल कमांड (स्क्रिप्ट चलाने के लिए) कैसे बना सकता हूं? लेकिन ईमानदार होने के लिए, मुझे इस परिदृश्य के व्यवहार से परेशानी का सामना करना पड़ा cd

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