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


214

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

अगर मैं अंदर हूं:

/etc/foo/bar/baz/moo

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

cd /var/lib/fubarred_app/blargh/logs

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

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

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


8
@ ब्रायन के उत्कृष्ट उत्तर के अलावा, आप प्रत्येक पथ के लिए उपनाम की एक जोड़ी बनाने पर विचार कर सकते हैं ताकि आप शीघ्रता से कुछ टाइप कर सकें: " bazmoo" या " blarghlog" प्रॉम्प्ट पर :)
वॉरेन

4
आप सिर्फ GNU स्क्रीन का उपयोग क्यों नहीं करते ?
शी

2
कौन सा खोल? इससे एक बड़ा फर्क पड़ता है।
रान्डल शवार्ट्ज

@warren ditto। वह सब कुछ करने का मेरा पसंदीदा तरीका है। मैं अपने कंप्यूटर का उपयोग करने के लिए अपना खुद का उपनाम अब ... =) का
आधा हिस्सा

Fasd कमाल का है। इसकी जांच - पड़ताल करें।
मेजकिनटोर

जवाबों:


301

आदेश

cd -

ज्यादातर मुख्य गोले पर आप जिस स्वैप की ज़रूरत है, उसे निष्पादित करेंगे, जो पुराना है

cd "$OLDPWD"

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


के लिए POSIX आदमी पेजcd का उल्लेख है:

विवरण

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

ऑपरेंड

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

cd "$OLDPWD" && pwd 

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


7
ध्यान रखें कि यह वास्तव में आपके द्वारा उपयोग किए जा रहे शेल पर निर्भर करता है, और चूंकि आपने निर्दिष्ट नहीं किया था, इसलिए गैर-मौजूद "पोर्टेबल" उत्तर देना कठिन होगा।
रैंडल श्वार्ट्ज

16
@ रैंडल, शायद आप अपने सभी व्यक्तिगत शेल टिप्पणियों को एक वोल्ट्रोन-शेल उत्तर में जोड़ सकते हैं।
हाइपरस्लग

@Randall। मैं बैश का उपयोग कर रहा था। यह ksh और zsh में भी काम करता है। वैसे, मैंने पहली बार लर्निंग पर्ल के 1994 के संस्करण से प्रोग्राम करना सीखा था, इसलिए मुझे बहुत खुशी हुई, जब मैं थोड़ा सा फैनबॉय था। :)
यित्ज़चेक

हम्म, मैंने इसके cd $OLDPWDलिए इस्तेमाल किया । यह अच्छा है कि मुख्यधारा के गोले एक तरह से छोटे रूप की पेशकश करते हैं।
ulidtko

2
@sinni कुछ जायके करना है pushd, और कम से कम यह में अंतर्निहित है bash
7

105

ब्रायन के जवाब के अलावा, यह ध्यान देने योग्य बात है कि इसमें भी 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से स्टैक पर धकेल देगा ।


सभी गोले में पुशड और पॉपड उपलब्ध नहीं हैं।
रैंडल श्वार्ट्ज

5
@ Wiesław: वाक़ई? काश बाश था कि ... बेशक, मैं cdकरने के लिए उपनाम कर सकते हैं pushd, और यह ज्यादातर एक ही होगा।
क्रिस चारबारुक

3
या उर्फ ​​पीडी को पुश करने के लिए और दोनों हैं। BTW पुशड (या pd, यदि आप इसे उर्फ ​​करते हैं) तो वर्तमान निर्देशिका और अंतिम-पुश निर्देशिका को स्वैप करता है, जो अनिवार्य रूप से 'cd -' करता है।
JRobert

मुझे अवधारणा पसंद है लेकिन कभी भी उनकी आदत नहीं है।
थोरबजर्न रेवन एंडरसन

13

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

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

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

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

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

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

आप इन कार्यक्रमों के लिए किसी भी पत्र को असाइन कर सकते हैं, "j" परंपरा है :)

j2 और z कई खोज शब्दों का समर्थन करते हैं, ...

~$ 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

2
"j" स्पष्ट रूप से शेल विशिष्ट है। आपने ऐसा नहीं कहा।
रैंडल श्वार्ट्ज

3
@ रैंडल: यह शैल-विशिष्ट कैसे है? यह एक कार्यक्रम है।
फिक्स

3
मैं बेवकूफ़ हूँ। :) मुझे अब दिख रहा है।
रैंडल श्वार्ट्ज

10

के अलावा cd -औरcd $OLDPWD

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

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


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

1
महान! यह अन्य चीजों की तुलना cdमें बहुत मदद करता है!
निलॉक्ट

9

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

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

a 1

और बादमें:

1

1
केवल एक शेल पर जो उपनाम और कार्यों को समझता है। सभी नहीं करते।
रैंडल श्वार्ट्ज

इसलिए यह alias =भागों को टाइप करता है ? hmmmm
Xen2050

6

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

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

bookmark foo

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

go foo

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

bookmarksshow

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

go sho[tab]

4

एक और संभावना सिर्फ दो खिड़कियों को खुला रखने की होगी, जिसमें प्रत्येक डायरेक्टरी में एक पोस्ट की जाएगी।


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

@ Xen2050 zsh में शेल विकल्प देखें share_history
रेडॉन रोसबोरो

4

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

किसी भी वंशज UNIX-bash में आप CDPATH का उपयोग करके फ़ोल्डर को cd- कमांड खोजों में विस्तारित कर सकते हैं ।

मेरी .bashrc-file से:

export CDPATH='.:~/source/'

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

cd myproject

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

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


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

हाँ, अच्छी टिप्पणी है। हमेशा पहले को शामिल करें , या आप अजीब सामान का अनुभव करेंगे।
फेरीम

3

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

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

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

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


3

यदि आपके पास केवल 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

2

Autojump एक बैश / श / zsh "सीडी" कमांड कि अपने कार्यों से, यह देखने है वीडियो

इसलिए यह पिछले फ़ोल्डर को जानने के बाद आपको मूव करने के लिए ले जाएगा

j moo

2

किरण

मेरे पास अपना एक उपकरण है, लेकिन मेरे पास डेरेक्स टूल पर भी एक नज़र होगी j

बेशक आगे और पीछे कूदने के लिए पहली पसंद है

सीडी -

मेरा उपकरण सिस्टम पर अद्वितीय नामों वाली निर्देशिकाओं के लिए है, जहां locateउपलब्ध है; यह एक मिलान निर्देशिका नाम की खोज करता है, और पहले मैच में कूदता है:

beam () 
{ 
    ldir=$(locate $1 | egrep "$1$" | head -n 1);
    if [[ -d $ldir ]]; then
        echo $ldir;
        cd $ldir;
    else
        echo "no directory "$ldir;
    fi
}

निर्भरता:

  • का पता लगाने
  • ग्रेप
  • सिर

कमियां:

  • पिछले अपडेट-रन की तुलना में नई निर्देशिकाएं नहीं मिली हैं
  • यदि एक से अधिक निर्देशिका मेल खाती हैं, तो यह आपके भाग्य पर निर्भर करता है, कि क्या आप उस व्यक्ति को ध्यान में रखते हैं जो आपके पास था।

सुधार / संशोधन:

  • पहली निर्देशिका चुनने के बजाय, कोड को विकल्पों की एक सूची प्रदर्शित करने के लिए संशोधित किया जा सकता है, उपयोगकर्ता को इनपुट करने के लिए 1,2,3, ... / बिन, / usr / bin, / usr / स्थानीय / बिन पर जाने के लिए प्रेरित किया जा सकता है ...

उपयोग:

  • एक सुविधाजनक तरीके से इसका उपयोग करने के लिए आप /etc/bash.bashrc या ~ / .bashprofile में फ़ंक्शन डालें।

मेरे समाधान का लाभ:

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