सवाल मैं ऊपर जाने की बजाय पिछली निर्देशिका में कैसे बदल सकता हूं?


मैं वर्तमान में अपने बहुत से कामकाजी घंटों को दो पथों के बीच आगे बढ़ता हूं जो पेड़ से बहुत दूर हैं और एक-दूसरे से रूट पर जाते हैं। यह मुझे मारता है कि अगर कोई तर्क था तो मेरा जीवन बहुत आसान होगा cd जो उपयोगकर्ता को उस अंतिम निर्देशिका में ले जाता है जिसमें वे थे।

यही है, अगर मैं अंदर हूं:

/etc/foo/bar/baz/moo

और फिर टाइप करें:

cd /var/lib/fubarred_app/blargh/logs

मैं फिर से पूरे पथ को टाइप किए बिना पहली निर्देशिका में वापस जाने में सक्षम होना चाहता हूं।

मेमोरी कुंजी इसे काट नहीं देती है क्योंकि मैं प्रत्येक स्थान पर पर्याप्त कमांड का उपयोग करता हूं, जो कि वापस जाना मुश्किल है और जिस मार्ग को मैं चाहता हूं उसे ढूंढना मुश्किल है।

क्या कोई छोटा कमांड है जो मुझे पिछली निर्देशिका में जाने देगा?


209
2017-08-17 20:18


मूल


के अतिरिक्त @ब्रायनउत्कृष्ट जवाब है, आप प्रत्येक पथ के लिए उपनामों की एक जोड़ी बनाने पर विचार कर सकते हैं ताकि आप कुछ ऐसा टाइप कर सकें: "bazmoo"या"blarghlog"प्रॉम्प्ट पर :) - warren
आप अभी क्यों उपयोग नहीं करते हैं जीएनयू स्क्रीन? - Shi
कौन सा खोल? इससे एक बड़ा फर्क पड़ता है। - Randal Schwartz
@warren ditto। यह सब कुछ करने का मेरा पसंदीदा तरीका है। मैं अपने कंप्यूटर का उपयोग करने के आधा हिस्सा अब अपने स्वयं के उपनाम है ... =) - ixtmixilix
Fasd भयानक है। इसकी जांच - पड़ताल करें। - majkinetor


जवाब:


आदेश

cd -

अधिकांश मुख्यधारा के गोले में आपको जिस स्वैप की आवश्यकता होती है, वह पुराना लंबा संस्करण होगा

cd "$OLDPWD"

जो पर्यावरण चर का उपयोग करेगा जिसमें पिछली कार्यशील निर्देशिका शामिल है।


के लिए POSIX मैन पेज cd उल्लेख है:

विवरण

यदि, उपर्युक्त चरणों के निष्पादन के दौरान, पीडब्ल्यूडी पर्यावरण चर बदल दिया गया है, तो OLDPWD पर्यावरण परिवर्तक को पुरानी कार्यशील निर्देशिका के मूल्य में भी बदला जाएगा (यह सीडी से पहले कॉल करने से पहले वर्तमान कार्य निर्देशिका है)।

ऑपरेंड

-जब एक हाइफ़न ऑपरेंड के रूप में उपयोग किया जाता है, तो यह आदेश के बराबर होगा:

cd "$OLDPWD" && pwd 

जो पिछली कार्यशील निर्देशिका में बदलता है और फिर उसका नाम लिखता है।


292
2017-08-17 20:23



ध्यान रखें कि यह वास्तव में आपके द्वारा उपयोग किए जा रहे शैल पर निर्भर करता है, और चूंकि आपने निर्दिष्ट नहीं किया है, इसलिए अस्तित्वहीन "पोर्टेबल" उत्तर देना मुश्किल होगा। - Randal Schwartz
@ रैंडल, शायद आप अपनी सभी व्यक्तिगत खोल टिप्पणियों को एक वोल्ट्रॉन-शैल उत्तर में जोड़ सकते हैं। - hyperslug
@Randall। मैं बैश का उपयोग कर रहा था। यह भी ksh और zsh में काम करता है। वैसे, मैंने पहली बार 1994 के संस्करण से कार्यक्रम करना सीखा सीखना पर्ल तो मुझे थोड़ा बहाना है जबकि मैं थोड़ा फैनबॉय। :) - Yitzchak
हम्म, मैंने इस्तेमाल किया cd $OLDPWD इसके लिए। यह अच्छा है कि मुख्यधारा के गोले एक छोटे से रूप प्रदान करते हैं। - ulidtko
@ सिनी कुछ स्वाद करना है pushd, और कम से कम यह एक अंतर्निहित है bash। - slhck


ब्रायन के जवाब के अलावा, यह भी उल्लेखनीय है कि वहाँ भी है pushd तथा popd, जो एक ढेर की तरह निर्देशिका बनाते हैं। यह विंडोज एनटी पर भी उपलब्ध है; हालांकि, यह सभी गोले में उपलब्ध नहीं है।

उदाहरण के लिए, हम तीन अलग-अलग निर्देशिकाओं पर जा सकते हैं, और जब आप कॉल करते हैं तो आप हमेशा अपना स्टैक देखेंगे pushd:

charon:~ werner$ pushd Documents/
~/Documents ~

charon:Documents werner$ pushd ../Movies/
~/Movies ~/Documents ~

charon:Movies werner$ pushd ../Downloads/
~/Downloads ~/Movies ~/Documents ~

और जब आप कॉल करते हैं popd एक पंक्ति में तीन बार, आप उन निर्देशिकाओं को रिवर्स ऑर्डर में स्टैक में प्राप्त करते हैं। उसी समय, ढेर फिर से खाली हो जाएगा।

charon:Downloads werner$ popd
~/Movies ~/Documents ~

charon:Movies werner$ popd
~/Documents ~

charon:Documents werner$ popd
~

charon:~ werner$ popd
-bash: popd: directory stack empty

यदि आप Zsh का उपयोग कर रहे हैं; इसमें एक AUTO_PUSHD विकल्प है, जो स्वचालित रूप से धक्का देगा cdढेर पर है।


105
2017-08-17 20:35



पुश और पॉपड सभी गोले में उपलब्ध नहीं हैं। - Randal Schwartz
@ Wiesław: वास्तव में? मेरी इच्छा है कि वह था ... बेशक, मैं उपनाम कर सकता था cd सेवा मेरे pushd, और यह ज्यादातर वही होगा। - Chris Charabaruk
या उर्फ ​​पीडी धक्का और दोनों है। बीटीडब्लू पुशड (या पीडी, अगर आप इसे उपनाम करते हैं) तो वर्तमान निर्देशिका और आखिरी धक्का वाली निर्देशिका को स्वैप कर देता है, जो अनिवार्य रूप से 'सीडी -' करता है। - JRobert
मुझे अवधारणा पसंद है लेकिन उन्हें कभी नहीं मिला। - Thorbjørn Ravn Andersen


कुछ "कूद" कार्यक्रम हैं

  • स्वतः छलांग (बुनियादी सुविधाओं के साथ बनाए रखा)
  • J2  (स्पष्ट रूप से कुछ उन्नत सुविधाओं के साथ अनजान)
  • z (उन्नत सुविधाओं के साथ "जे" के बनाए रखा संस्करण)

ये किसी भी तरह की निर्देशिका नेविगेशन को कम करता है। आप पथ का एक हिस्सा देकर इसका उपयोग करते हैं और यह सिर्फ काम करता है।

आपके मामले में

~$ j baz 
/etc/foo/bar/baz/moo$

~$ j bla 
/var/lib/fubarred_app/blargh/logs$

आप इन कार्यक्रमों को जो भी पत्र चाहते हैं उसे असाइन कर सकते हैं, "जे" परंपरा है :)

जे 2 और जेड एकाधिक खोज शब्द का समर्थन, ...

~$ j baz src
/home/me/projects/baz/repository/trunk/src$

... और अधिक विकल्प।

~$ j -l  # list directories by "frecency"(frequency + recency) score
~$ j -r PATTERN # match by rank only, not recency
~$ j -t PATTERN # match by recency only, not rank

13
2017-08-17 23:52



"जे" स्पष्ट रूप से खोल विशिष्ट है। आपने यह नहीं कहा। - Randal Schwartz
@ रंदल: यह शैल-विशिष्ट कैसे है? यह एक कार्यक्रम है। - Fixee
मैं बेवकूफ़ हूँ। :) मुझे अब दिख रहा है। - Randal Schwartz


के अतिरिक्त cd - तथा cd $OLDPWD

आप दबाने से इतिहास खोज का उपयोग कर सकते हैं CTRL-R और के कुछ पत्र टाइपिंग cd आदेश जो आपने पहले दर्ज किया था। दबाना CTRL-R बार-बार पुराने मैच लाएगा।

यदि आपके पास बदलने के लिए दो से अधिक पथ हैं तो यह विधि अधिक उपयोगी होगी।


10
2017-08-18 09:44



CTRL-R जरूरी नहीं है। हो सकता है कि आप / कुछ / अस्पष्ट / निर्देशिका / गहरे और किए गए "सीडी evendeeperdir" हो गया हो तो ~ / कहीं / अलग हो गया। - justintime
महान! यह अन्य चीजों के लिए काम करता है cd, बड़ी मदद! - Niloct


आप निर्देशिकाओं के लिए आसानी से उपनाम बनाने के लिए इसका उपयोग कर सकते हैं:

a() { alias $1=cd\ $PWD; }

a 1

और बादमें:

1

9
2017-08-18 01:50



केवल एक खोल पर जो उपनाम और कार्यों को समझता है। सब कुछ नहीं। - Randal Schwartz
तो यह टाइपिंग छोड़ देता है alias = भागों? hmmmm - Xen2050


bashmarks आपको फ़ोल्डर की श्रृंखला को बुकमार्क करने और टैब पूर्ण होने के साथ उनके बीच कूदने देगा:

किसी फ़ोल्डर को बुकमार्क करने के लिए, बस उस फ़ोल्डर पर जाएं, फिर इसे बुकमार्क करें:

bookmark foo

बुकमार्क "फू" नाम दिया जाएगा। जब आप उस फ़ोल्डर के उपयोग पर वापस जाना चाहते हैं:

go foo

बुकमार्क की एक सूची देखने के लिए:

bookmarksshow

टैब समापन काम करता है, शूबी बुकमार्क पर जाने के लिए, बस:

go sho[tab]

6
2017-08-18 08:54





एक और संभावना है कि प्रत्येक खिड़की पर स्थित एक के साथ दो खिड़कियां खुली रहें।


4
2017-08-18 03:00



कोई साझा इतिहास हालांकि, यदि आप नियमित रूप से पिछले आदेशों का उपयोग / संपादन करते हैं (शायद एक रीसेट उन्हें प्राप्त करेगा ...?) - Xen2050
@ Xen2050 खोल विकल्प देखें share_history zsh में - Radon Rosborough


मुझे पता है कि यह आपके प्रश्न का उत्तर कड़ाई से नहीं बोल रहा है, लेकिन यह लक्ष्य तक पहुंचने में सहायक है आपको अपनी महत्वपूर्ण निर्देशिका में ले जा रहा है

किसी भी वंश में यूनिक्स-बैश में आप इसका उपयोग कर सकते हैं CDPATH सीडी-कमांड में फ़ोल्डर को विस्तारित करने के लिए।

मेरी .bashrc-file से:

export CDPATH='.:~/source/'

सीडी पहली बार आपके वर्तमान फ़ोल्डर में खोजें, फिर मेरी कोडिंग-प्रोजेक्ट-निर्देशिका में खोजें।

cd myproject

.. मुझे ले जाता है ~ / स्रोतों / MyProject जहां से मैं वर्तमान में खड़ा हूं।

सरल छोटी सुविधा जिसने मेरी निर्देशिका-नेविगेशन को बहुत मदद की है।


4
2017-08-19 11:11



+1 यह सीडीपीएटीएच फ़ोल्डर को जोड़ता है cdस्वत: पूर्ण (टीएबी) सूची, जो अच्छी है। परंतु अगर . शामिल नहीं है और यदि एक सीडीपीएटीएच फ़ोल्डर में एक फ़ोल्डर है एक ही नाम तब आपकी वर्तमान निर्देशिका में से एक के रूप में cd samename सीडीपीएटीएच निर्देशिका में जाएगा और नहीं वर्तमान निर्देशिका में से एक, जो खराब है। उपयोग करना है cd ./samename एक डुप्लिकेट फ़ोल्डर में जाने के लिए। - Xen2050
हाँ, अच्छी टिप्पणी। हमेशा पहले शामिल करें ।, या आप अजीब सामान का अनुभव करेंगे। - phareim


हाँ, cd - जाने का रास्ता है, लेकिन मुझे आपके खोल में मिलने वाली शक्ति की कमी के बारे में चिंता है। popd तथा pushd भी अच्छे हैं, और वह भी j चीज भी अच्छी लगती है।

मैं अपनी खुद की उपयोगिता को अंगूठी में फेंक दूंगा ... यह सिर्फ कुछ है जो मैं पिछले 10 सालों से मेरे साथ निर्माण, अनुकूलन और माइग्रेट कर रहा हूं और यह ठीक है कि मैं इसे करना चाहता हूं।

मेरी निर्देशिका प्रबंधन उपयोगिता के लिए ब्लॉग पोस्ट

अगर यह आपके लिए काम करता है, तो कमाल है, लेकिन अगर यह मुझे वादा नहीं करता है तो आपको कुछ और मिल जाएगा :) आप बस साथ नहीं रह सकते हैं cd अकेला।


3
2017-08-18 14:18





यदि आपके पास केवल 2 निर्देशिका हैं, तो सबसे आसान तरीका है, जैसा कि बताया गया है,

cd -

जब मैंने अतीत में ऐसी चीजें की हैं, तो मैंने कुछ चालें की हैं जो मैंने की हैं, जो सहायक हो सकती हैं।

  1. .Cshrc फ़ाइल में उपनाम आदेश दें, ऐसा कुछ

    alias moo /etc/foo/bar/baz/moo  
    alias logs cd /var/lib/fubarred_app/blargh/logs
    
  2. मेरी होम निर्देशिका से ब्याज के पथों के लिए शॉर्टकट लिंक करें। यह एक बार बात है।

    cd ~
    ln -s /var/lib/fubarred_app/blargh/logs blargh
    ln -s /etc/foo/bar/baz/moo
    

यह एक निर्देशिका को जितना आसान बदल सकता है:

   cd ~/moo
   cd ~/blargh

3
2017-08-19 03:08