बैश शेल में त्वरित निर्देशिका नेविगेशन


119

मैं अक्सर निर्देशिकाओं के बीच स्विच करना चाहूंगा जो पूरी तरह से असंबंधित पथ में हैं, उदाहरण के लिए /Project/Warnest/docs/और ~/Dropbox/Projects/ds/test/

लेकिन मैं cd /[full-path]/हर समय टाइप नहीं करना चाहता । क्या पहले से काम की निर्देशिकाओं पर स्विच करने के लिए कोई शॉर्टकट कमांड हैं?

एक उपाय जो मैं सोच सकता था, वह यह है bash .profileकि अक्सर उपयोग की जाने वाली निर्देशिकाओं के लिए और cdउन चर का उपयोग करते हुए उनके लिए पर्यावरण चर जोड़ें ।

लेकिन क्या इसका कोई और उपाय है?


प्रतीकात्मक लिंक भी इसके लिए उपयोगी हो सकते हैं। en.wikipedia.org/wiki/…
user606723

जवाबों:


135

यदि आप केवल दो निर्देशिकाओं के बीच स्विच कर रहे हैं, तो आप cd -आगे और पीछे जाने के लिए उपयोग कर सकते हैं ।


13
यह मुझे इतने लंबे समय के लिए कैसे एक रहस्य बना दिया है। इस बेहतरीन टिप के लिए आपका बहुत-बहुत धन्यवाद।
श्री शिकोदेंस

3
+1 निश्चित रूप से मेरा पसंदीदा और एक है कि किसी भी तरह कई विशेषज्ञों ने 'याद' किया है।
माइकल डुरंट

62

वहाँ एक खोल चर रहा है CDPATHमें bashऔर kshऔर cdpathमें zsh:

CDPATH    The search path for the cd command. This is a colon-separated
          list of directories in which the shell looks for destination
          directories specified by the cd command.

तो आप अपने ~ / .bashrc में सेट कर सकते हैं:

export CDPATH=/Project/Warnest:~/Dropbox/Projects/ds

तब cd docsऔर cd testआपको पहली बार ऐसी डायरेक्टरी मिली। (मेरा मतलब है, भले ही एक ही नाम वाली निर्देशिका वर्तमान निर्देशिका में मौजूद होगी, CDPATHफिर भी परामर्श किया CDPATHजाएगा । यदि दिए गए नाम के साथ उपनिर्देशिका वाले अधिक निर्देशिका होंगे, तो पहले का उपयोग किया जाएगा।)


16
यह उल्लेख किया जाना चाहिए कि सामान्य तौर पर, आप चाहते हैं कि पहली प्रविष्टि $CDPATHहो .(स्पष्ट रूप से प्रविष्टि, यानी :काम भी करता है)। अन्यथा आप विषम व्यवहार के साथ समाप्त हो जाएंगे, जहां CDPATHडायर मौजूदा कामकाजी निर्देशिका में निर्देशिकाओं पर वरीयता लेते हैं, जो आप नहीं चाहते हैं।
jw013

4
मैं एक ही काम बहुत ज्यादा करता हूं, लेकिन इसके बिना export। इस तरह, CDPATHसंभावित अजीब या हानिकारक प्रभावों के साथ लिपियों को निर्यात नहीं किया जाता है। अधिक चर्चा और उदाहरणों के लिए यहां देखें ।
टेलीमेकस

"बश और ksh और cdpath में zsh" ... और tcsh में (बस सुपर यूजर पर उस पर आधारित एक सवाल का जवाब दे रहा है और एसई पर इसी तरह के जवाब की तलाश करते हुए पाया)।
हेन्नेस

यह POSIX- निर्दिष्ट है, मुझे लगता है। कम से कम, POSIX इसके लिए cdसंदर्भित करता है।
15

48

कुछ और जो आप आजमा सकते हैं, वह है एक उपकरण जिसे ऑटोजंप कहा जाता है । यह कॉल करने का डेटाबेस रखता है यह उपनाम ( jडिफ़ॉल्ट रूप से) है और आप कहाँ जाना चाहते हैं, इसके बारे में बुद्धिमान निर्णय लेने का प्रयास करता है। उदाहरण के लिए यदि आप अक्सर टाइप करते हैं:

j ~/Pictures

आप चुटकी में वहाँ जाने के लिए निम्नलिखित का उपयोग कर सकते हैं:

j Pic

यह डेबियन और उबंटू में उपलब्ध है, और प्रति-उपयोगकर्ता आधार पर ~/.bashrcया ~/.zshrcडिफ़ॉल्ट रूप से शामिल है।


5
Autojump शायद इसके लिए सबसे अच्छा उपकरण है, आम डायरियों के डेटाबेस को बनाने में थोड़ा समय लगता है, लेकिन एक बार जब मुझे लगता है कि आप पाएंगे कि आप इसके बिना नहीं रह सकते हैं। मैं जानता हूं कि जब भी मैं किसी और के कंप्यूटर पर होता हूं तो मैं अपंग महसूस करता हूं।
quodlibetor

1
धन्यवाद इस उपकरण को प्यार! और यद्यपि cd -यह जानना आसान है कि क्या आप इसे पहले से नहीं जानते हैं, मुझे लगता है कि यह वर्तमान शीर्ष उत्तर की तुलना में बहुत बेहतर समाधान है।
उपयोगकर्ता

क्या सिस्टम पर स्थापित सिस्टम चौड़ा?
ctrl-alt-delor-

1
@richard यह apt-get install autojumpसिस्टम-वाइड इंस्टॉलेशन के लिए एक पैकेज के रूप में उपलब्ध है (उदाहरण के लिए , उबंटू में, लेकिन उनके पेज पर प्रलेखित कई अन्य लोगों के लिए भी), लेकिन प्रत्येक उपयोगकर्ता को इसे अपने शेल वातावरण में लोड करने की आवश्यकता होती है, इसलिए यह सीडी को ट्रैक करने के लिए ओवरराइड कर सकता है आप कहाँ जा रहे हैं
nealmcb

काम करने के लिए महत्वपूर्ण कहना source /usr/share/autojump/autojump.sh~ ~ .bashrc के लिए autojump को जोड़ा जाना चाहिए ।
पाब्लो ए

39

यदि यह निर्देशिकाओं की एक छोटी संख्या है, तो आप pushdउनके बीच घूमने के लिए उपयोग कर सकते हैं:

# starting point
$ pwd
/Project/Warnest/docs
# add second dir and change to it
$ pushd ~/Dropbox/Projects/ds/test
~/Dropbox/Projects/ds/test /Project/Warnest/docs
# prove we're in the right place
$ pwd
~/Dropbox/Projects/ds/test
# swap directories
$ pushd
/Project/Warnest/docs ~/Dropbox/Projects/ds/test

इसके विपरीत cd -, आप दो से अधिक निर्देशिकाओं के साथ इसका उपयोग कर सकते हैं


नोआच के सुझाव के बाद, मैं अब इसका उपयोग कर रहा हूं:

function pd()
{
    if [[ $# -ge 1 ]];
    then
        choice="$1"
    else
        dirs -v
        echo -n "? "
        read choice
    fi
    if [[ -n $choice ]];
    then
        declare -i cnum="$choice"
        if [[ $cnum != $choice ]];
        then #choice is not numeric
            choice=$(dirs -v | grep $choice | tail -1 | awk '{print $1}')
            cnum="$choice"
            if [[ -z $choice || $cnum != $choice ]];
            then
                echo "$choice not found"
                return
            fi
        fi
        choice="+$choice"
    fi
    pushd $choice
}

उदाहरण का उपयोग:

# same as pushd +1
$ pd 1

# show a prompt, choose by number
$ pd
 0 ~/Dropbox/Projects/ds/test
 1 /Project/Warnest/docs
 2 /tmp
? 2
/tmp ~/Dropbox/Projects/ds/test /Project/Warnest/docs

# or choose by substring match
$ pd
 0 /tmp
 1 ~/Dropbox/Projects/ds/test
 2 /Project/Warnest/docs
? doc
/Project/Warnest/docs /tmp ~/Dropbox/Projects/ds/test

# substring without prompt
$ pd test
~/Dropbox/Projects/ds/test /Project/Warnest/docs /tmp

आदि जाहिर है कि यह केवल स्टैक के माध्यम से घूमने के लिए है और नए रास्तों को जोड़ने का काम नहीं करता है - शायद मुझे इसका नाम बदलना चाहिए।


6
ऊह, मुझे पता था pushdऔर popdट्रैवर्सल के लिए, लेकिन ऐसा नहीं था कि पुशड घूम सकता है जो अब तक इस्तेमाल किया गया है ...
इजाका

14

मैं aliasउन सीडी को करने के लिए bashrc में उपयोग करता हूं ।
जैसे कि:

alias wdoc='cd ~/Project/Warnest/docs'
alias dstest='cd ~/Dropbox/Projects/ds/test'

क्या bashrc एक फ़ाइल की तरह है। जिसमें मुझे उन पंक्तियों को जोड़ने की आवश्यकता है?
saiy2k

~/.bashrcया /etc/bash.bashrc। मैंने .profileपहले इस्तेमाल नहीं किया था , इसलिए उनके बीच संबंध नहीं जानते :-(
फेलिक्स यान

स्क्रिप्ट bashrc आप टर्मिनल खोलने के लिए हर समय शुरू कर देंगे। स्टार्टअप के साथ प्रोफाइल।

उन लाइनों को मेरे लिए जोड़ा गया है .bash_profileऔर यह महान काम करता है .. thx :)
saiy2k

मेरे पास कई विशिष्ट परियोजना फ़ोल्डर हैं जो मैं नियमित रूप से जाता हूं, उन्हें स्थापित करने और उन्हें बनाए रखने का यह सबसे आसान तरीका है। इसके अलावा, मेरे लिए, यह सभी समाधानों के टाइप किए गए पूर्ण वर्णों का परिणाम है। चुम्मा! :-)
मूडबॉम

11

मुझे एक स्क्रिप्ट मिली (आमतौर पर जिसे acd_funch.sh कहा जाता है) ने मेरे लिए इस मुद्दे को हल किया। इसके साथ ही आप cd --अंतिम 10 निर्देशिकाओं को देख सकते हैं जिनका आपने उपयोग किया है। यह कुछ इस तरह दिखेगा:

0  ~/Documents/onedir
1  ~/Music/anotherdir
2  ~/Music/thirddir
3  ~/etc/etc

पर जाने के लिए ~/Music/thirddirबस टाइपcd -2

संदर्भ

नोट: यह स्क्रिप्ट मूल रूप से एक linux gazette लेख में प्रकाशित की गई थी जो यहाँ उपलब्ध है: acd_func.sh - विज़िट की गई निर्देशिका नामों के इतिहास को रखने, प्रदर्शित करने और उपयोग करने के लिए bash की सीडी का विस्तार करता है


लिनक्स गजट, अंक # 109, दिसंबर 2004 में भी बहुत ही स्क्रिप्ट प्रकाशित हुई थी
सर्ज स्ट्रोबंड्ट

@ डीन लिंक एक म्यूजिक वीडियो में जाता है और कहता है कि जियोसिटीज बंद हो गया है।
कुछ समय 15

1
@somethingSomething जोड़ा गया वैकल्पिक लिंक।
डीन

इतिहास | grep सीडी
user2180794

10

cdable_varsबैश में शेल विकल्प का प्रयास करें । आप इसे स्विच ऑन करें shopt -s cdable_vars

फिर आपको अपने चर सेट करने की आवश्यकता है export dir1=/some/path। और अंत में cd dir1, आदि तो आप ~/.bashrcइसे छड़ी बनाने के लिए अपने में डाल सकते हैं ।


10

"पुशड -एन " (मान लें कि आप बैश का उपयोग करते हैं)।

अपने ~ / .bashrc में जोड़ें:

pushd -n /Project/Warnest/docs/
pushd -n ~/Dropbox/Projects/ds/test/

फिर,

cd ~ तुम्हारा घर है,

cd ~1 है ~/Dropbox/Projects/ds/test/

cd ~2 है /Project/Warnest/docs/

आप का उपयोग कर सकते हैं ~1, ~2ठीक उसी तरह आदि ~


7

यहां बहुत सारे अच्छे सुझाव हैं। जो उपयोग करने के लिए इस बात पर निर्भर करेगा कि क्या आपके पास निर्देशिकाओं की एक छोटी निश्चित सूची है, जो आप के बीच स्विच करते हैं, या क्या आप अधिक सामान्य समाधान की तलाश कर रहे हैं।

यदि यह एक छोटी निश्चित सूची है, तो साधारण उपनाम (फेलिक्स यान द्वारा सुझाए गए) की स्थापना करना आसान होगा।

यदि आप एक अधिक सामान्यीकृत समाधान (यानी कई अलग-अलग निर्देशिकाएं, समय के साथ बदल रहे हैं) की तलाश कर रहे हैं, तो मैं पुशड और पॉपड का उपयोग करूंगा (जैसा कि यूएसडी ने सुझाव दिया है)। मुझे व्यक्तिगत रूप से डिफ़ॉल्ट पुशड / पॉपड का उपयोग करना कठिन लगता है, खासकर जब आप कई फ़ोल्डरों के बीच स्विच करना शुरू करते हैं; हालाँकि मैंने कुछ ट्वीक्स लिखे जो मेरे लिए बहुत आसान हैं। निम्नलिखित को अपने bashrc में जोड़ें:

alias dirs='dirs -v'
pd () 
{ 
    if [ "$1" ]; then
        pushd "${1/#[0-9]*/+$1}";
    else
        pushd;
    fi > /dev/null
}
  • एक नए फ़ोल्डर में कूदने के लिए pd(एक छोटे रूप के रूप में pushd) का उपयोग करें , याद रखें कि आप कहां थे।
  • dirsसहेजी गई निर्देशिकाओं की सूची देखने के लिए उपयोग करें ।
  • pd 3निर्देशिका संख्या 3 पर कूदने के लिए उपयोग करें ।

उदाहरण उपयोग:

$ PS1='\w\$ '   ## just for demo purposes
~$ pd ~/Documents/data
~/Documents/data$ pd ../spec
~/Documents/spec$ pd ~/Dropbox/Public/
~/Dropbox/Public$ pd /tmp
/tmp$ pd /etc/defaults/
/etc/defaults$ dirs
 0  /etc/defaults
 1  /tmp
 2  ~/Dropbox/Public
 3  ~/Documents/spec
 4  ~/Documents/data
 5  ~
/etc/defaults$ pd 2
~/Dropbox/Public$ dirs
 0  ~/Dropbox/Public
 1  ~/Documents/spec
 2  ~/Documents/data
 3  ~
 4  /etc/defaults
 5  /tmp
~/Dropbox/Public$ pd 4
/etc/defaults$ dirs
 0  /etc/defaults
 1  /tmp
 2  ~/Dropbox/Public
 3  ~/Documents/spec
 4  ~/Documents/data
 5  ~
/etc/defaults$ pd 3
~/Documents/spec$ popd
~/Documents/data ~ /etc/defaults /tmp ~/Dropbox/Public
~/Documents/data$ 

6

निम्नलिखित एक मामले पर काम करने के लिए दिखाई दिया जिस पर मैंने इसका परीक्षण किया था, और आप अपनी निर्देशिका के नाम को ~ / बुकमार्क में सहानुभूति के रूप में छोड़ सकते हैं:

mkdir "$HOME/Bookmarks"
ln -s /tmp "$HOME/Bookmarks/testdir"

function ccd() { cd $(readlink "$HOME/Bookmarks/$1") ; }

ccd testdir && echo $PWD
# gives /tmp

उस ccd () फ़ंक्शन को टर्मिनल प्रॉम्प्ट में टाइप करने की आवश्यकता है या कहीं और? क्या आप समझा सकते हैं?
sa22k

1
@ saiy2k: क्षमा करें, हाँ। functionरेखा अपने .bashrc में चला जाता है (यदि आप अपने टर्मिनल का परीक्षण करने में यह लिख सकते हैं, लेकिन यह खत्म हो जाएगा जब आप उस विंडो को बंद), लाइनों से पहले "testdir" का परीक्षण मामले की स्थापना के लिए एक नाम बनने /tmp, और अंतिम पंक्ति यह देखने के लिए परीक्षण है कि क्या यह काम करता है।
उलरिच श्वार्ज़

6

आप कोशिश j2 से भी बदतर कर सकते हैं ।

README से:

एक जटिल निर्देशिका वृक्ष के आसपास बहुत समय सीडी-आईएनजी खर्च करें?

j आपके पास वहाँ और आपके द्वारा खर्च किए गए समय का ट्रैक रखता है, और उन निर्देशिकाओं पर कूदने का एक सुविधाजनक तरीका प्रदान करता है जिनका आप वास्तव में उपयोग करते हैं।

मैं इसे बड़े पैमाने पर इस्तेमाल करता हूं और इसकी सिफारिश करता हूं।


5

मैं ज़िश का उपयोग करने की सलाह दूंगा , जो कि शेल, बहुत सी प्रोग्रामों के लिए डायरेक्टरी, फाइल्स और यहाँ तक कि ऑप्शन के लिए बहुत अच्छा TAB पूरा करता है।

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


TAB पूर्णता के लिए zsh को बदलने की आवश्यकता नहीं है क्योंकि bash में यह सब समान है। अन्य कार्यक्षमता के लिए हो सकता है लेकिन इसके लिए नहीं।
पीयर स्ट्रिट्जिंगर

1
@PeerStritzinger बैश ने उस प्रकार की कार्यक्षमता को BASH 4.0 में पेश किया, लेकिन zsh की तुलना में, यह अभी भी काफी पीछे है। "सभी समान" कहना निश्चित रूप से गलत है।
पोलमन ने

खैर zsh स्पष्ट रूप से übershell है, लेकिन सिर्फ टैब पूरा होने के लिए बदलने की आवश्यकता नहीं है (सवाल बैश के लिए पूछा गया था)। इसके अलावा bash 4.0 को 3 साल पहले पेश किया गया था ...
Peer Stritzinger

5

मेरे अनुभव में, शेल में नेविगेट करने में सबसे बड़ी गति इसकी इतिहास खोज कार्यक्षमता का उपयोग करना है। बैश में आप Ctrl+ Rऔर कुछ पैटर्न में टाइप करके कमांड के अपने इतिहास में पीछे की ओर खोज सकते हैं । उस पैटर्न को तब आपके इतिहास में पिछली प्रविष्टियों के विरुद्ध मिलान किया जाता है - क्या यह cdकमांड या अन्य संचालन हो सकता है - और सुझाव आपके टाइप किए जाते हैं। सुझाए गए कमांड को फिर से चलाने के लिए बस एंटर दबाएं। इसे reverse-search-historyबैश में कहा जाता है और मैं इसे प्यार करता हूं। यह मुझे बहुत कीस्ट्रोक्स बचाता है और मेरी आंतरिक मेमोरी को बख्शता है।

यह एक अच्छी बात है क्योंकि आप केवल एक आदेश के कुछ छोटे भाग को याद करने की तरह है Dropया Waदो इतिहास प्रविष्टियों के बीच भेद करने के लिए cd ~/Dropbox/Projects/ds/test/और cd /Project/Warnest/docs/


5

मैं भी इन उपनामों का उपयोग करता हूं (इन्हें ~ / .bashrc में जोड़ें):

alias ..='cd ..'
alias ...='cd ../..'
alias ....='cd ../../..'
alias .....='cd ../../../..'

उनके साथ ऊपरी निर्देशिका में जाना बहुत जल्दी है (फिर भी यह केवल नेविगेशन के आधे हिस्से को हल करता है)।


1
ये सहायक उपनाम हैं, लेकिन मुझे पूरी तरह से यकीन नहीं है कि वे ओपी की जरूरतों से मेल खाएंगे। आप अपने सुझाव के विस्तार पर विचार कर सकते हैं कि यह कैसे ओपी के मुद्दे के लिए सीधे मददगार हो सकता है।
HalosGhost

4

यदि आप zsh का उपयोग कर रहे हैं:

  • आपको टाइप करने की ज़रूरत नहीं है cd, केवल निर्देशिका पथ टाइप करें ( /foo/bar/baz<Enter>बराबर cd /foo/bar/baz<Enter>)

    auto_cdसेट करने के लिए विकल्प की आवश्यकता है

  • आप के साथ संक्षिप्त पथ विस्तार कर सकते हैं Tabकुंजी ( /u/sh/pi<Tab>के लिए विस्तारित /usr/share/pixmaps, फ़ाइल नाम के लिए काम करता है और साथ ही)

3
बैश 4 प्राप्त किया है shopt -s autocd, इसलिए यह अब केवल एक अच्छाई नहीं है।
गाइल्स

4

त्वरित निर्देशिका परिवर्तनों के लिए एक अच्छा उपकरण है:

xd - eXtra फास्ट डायरेक्टरी चेंजर http://xd-home.sourceforge.net/xdman.html

थोड़ा अजीब है कि आपको इसे bash प्रोफाइल में मैप करना होगा या इसी तरह यह केवल डायरेक्टरी को आउटपुट करेगा

# function to do `cd` using `xd`
# -g turns generalized directory search command processing on
# which improves the whole thing a bit
f() 
{
        cd `/usr/bin/xd -g $*`
}

आप निम्न कार्य कर सकते हैं:

# change to /var/log/a* (gives you a list to choose from)    
f vla
# to skip the list and go directly to /var/log/apache2
f vlapach

f() { cd "$(xd -g "$@")"; }सही ढंग से स्थानिक निर्देशिकाओं और रिक्त स्थान को तर्कों में बदलने के लिए फ़ंक्शन को बदलें xd(आपको संभवतः पथ की आवश्यकता नहीं है)। यदि आप कभी xdअन्य तरीके से उपयोग नहीं करते हैं , तो आप वैकल्पिक रूप से कर सकते हैं xd() { cd "$(command xd -g "$@")"; }(वैकल्पिक रूप से, /usr/bin/xdइसके स्थान पर उपयोग करें command xd- command xd …यदि आप इसे बायपास करने की आवश्यकता है तो आप हमेशा चला सकते हैं )।
एडम काटज़

4

आपको कभी भी शेल में पूर्ण पथ नहीं लिखना चाहिए। आप हमेशा उपयोग कर सकते हैं:

soffice /P*/W*/*/mydoc*

के बजाय

soffice /Project/Warnest/docs/mydoc.odt

1
यह टैब-पूरा करने की तरह है, लेकिन हर तरह से बदतर
माइकल Mrozek

आप टैब keypressing की euqal राशि के साथ पूरा करने के लिए जब तक परियोजना केवल है के साथ ऐसा नहीं कर सकते फ़ाइल पी के साथ शुरू, आदि इसके अलावा, आप पूरा करने के लिए हर बार इंतजार करना, का उपयोग कर * आप प्रतीक्षा करने की कोई जरूरत नहीं है।
gena2x

मुझे लगता है कि आपके पास यह पीछे की ओर है - आप P*तब तक नहीं कर सकते जब तक कि प्रोजेक्ट केवल एकमात्र फ़ाइल नहीं है, जो पी। टैब के साथ शुरू हो रही है। पूरा होने के बाद (अधिकांश गोले में डिफ़ॉल्ट रूप से, आप menu-completeबैश में टैब को रीबाइंड कर सकते हैं ), और सरल मामलों में तुरंत हल करता है। इस तरह, वहाँ कोई इसके लिए चारों ओर प्रतीक्षा कर रहा है
माइकल Mrozek

'आप ऐसा नहीं कर सकते' के बारे में - यदि आप सोचते हैं कि आप नहीं कर सकते हैं, तो आप इसे पूरा कर सकते हैं। इको / u * / b * / g ++
gena2x

1
मैं समझता हूं कि आपका क्या मतलब है, यह तब तक तेज है जब तक आपको यकीन है कि आपने एक अस्पष्ट रास्ता टाइप कर लिया है, लेकिन कुछ ऐसा /P*/W*/*/mydoc*लगता है जैसे यह ठीक काम करेगा जब तक कि एक दिन आप एक और फ़ाइल बनाने के लिए नहीं हुए जो उस ग्लोब से मेल खाती है, और अचानक आप समाप्त हो जाते हैं दोनों को एक साथ खोलना। /u*/*/g++प्रभावशाली रूप से कुछ वर्ण हैं, लेकिन उम्मीद है कि मेरे किसी भी मूल फ़ोल्डर के सबफ़ोल्डरों में से कुछ भी नहीं uहै जिसका नाम शुरू है g++। (एक अच्छा समझौता के रूप में, कुछ गोले में आप टैब के रूप में तुम जाओ यथा-स्थान globs विस्तार करने के लिए उपयोग कर सकते हैं)
माइकल Mrozek

3

OLDPWDआईईईई 1003.1 (पोसिक्स) के अनुसार, एक पर्यावरण वैरिएबल भी है , जिसे पिछली कार्यशील निर्देशिका के साथ अद्यतन किया जाना चाहिए, जो हर बार cdकार्यशील निर्देशिका (आईईईई 1003.188 के पृष्ठ 2506 की लाइन 80244) को बदलता है।


3

इसके लिए विशेष रूप से एक "wcd" ऐप भी बनाया गया है (यह भी कि मैं उस पर हूं) आप इसके साथ शार्टकट, बुकमार्क के डारमार्क बना सकते हैं। वाइल्ड कार्ड का भी समर्थन करता है। मैन पेज और डॉक्स / usr / शेयर / wcd में पढ़ने से बहुत मदद मिलनी चाहिए।

http://manpages.ubuntu.com/manpages/hardy/man7/wcd.7.html


3

निर्देशिका को बुकमार्क करने के लिए cdargs सबसे कुशल उपकरण है: http://www.youtube.com/watch?v=uWB2FIQLzZg


क्या यह एक ऐसा उत्पाद है जिससे आप जुड़े हैं?
कज़र्क

मुझे cdargs की ओर इशारा करने के लिए धन्यवाद। बस sudo apt-get cdargsउबंटू पर। BTW यूट्यूब वीडियो वास्तव में बुरा है, लेकिन उपकरण बहुत अच्छा है।
डेविड जूल

3

Fastcd आज़माएं ( https://github.com/frazenshtein/fastcd ) यह हुक सेट करता है जो रिकॉर्ड बैश से निर्देशिका का दौरा करता है। और स्क्रिप्ट को "j" उपनाम के रूप में सेट करता है, जो आपको अंतिम विज़िट की गई निर्देशिकाओं को दिखाता है, जल्दी से सीडी (फ़िल्टर निर्देशिकाओं के लिए टाइप करना शुरू करने) की क्षमता के साथ। "। J" उपनाम बनाने के लिए .bashrc का संशोधन आवश्यक है।

उपकरण प्राप्त करना

cd ~; mkdir Soft; cd Soft
git clone https://github.com/frazenshtein/fastcd

आवश्यक मॉड्यूल स्थापित करें

pip install --user urwid

अपने bashrc में set.sh फ़ाइल का स्रोत

echo -e "\nsource /home/$USER/Soft/fastcd/set.sh\n" >> ~/.bashrc

और bashrc को अपडेट करें

source ~/.bashrc

फिर कंसोल में बस "जे" टाइप करें


यह कैसे काम करता है? यदि यह उपनाम है, तो यह उपकरण आपके लिए क्या करता है जिसे आप मैन्युअल रूप से संपादित नहीं कर सकते हैं .bashrc?
जी-मैन

यह डेमॉन लॉन्च करता है जो रिकॉर्ड किए गए गोले (बैश) के लिए ~ / .fastcd में निर्देशिकाओं का रिकॉर्ड करता है। "j" टूल लॉन्च करता है जो आपको अंतिम विज़िट की गई निर्देशिकाओं को दिखाता है, जल्दी से सीडी की क्षमता के साथ। "। J" उपनाम बनाने के लिए .bashrc का संशोधन आवश्यक है। आप अधिक जानकारी के लिए स्रोत कोड देख सकते हैं, मुझे लगता है
सैम टॉलीमैन

अपनी त्वरित प्रतिक्रिया के लिए धन्यवाद। यह उस प्रकार की जानकारी है जो उत्तर में होनी चाहिए। कृपया इस जानकारी को शामिल करने के लिए अपना उत्तर संपादित करें।
जी-मैन

3

मेरे पास एक ही सवाल था, और पहले यह जवाब मिला । मैंने उपयोगिता z ( https://github.com/rupa/z ) स्थापित की ।

यह वही है जो आप खोज रहे हैं, क्योंकि z आपके cd कमांड से सीखता है, और फ्रीसीेंसी सिद्धांत (अक्सर और हाल के) के अनुसार निर्देशिकाओं का ट्रैक रखता है । तो जब आप दोनों सीडी कमांड एक बार कर लेते हैं, तो आप कुछ कर सकते हैं जैसे:

z docs
z ds

/Project/Warnest/docs/और ~/Dropbox/Projects/ds/test/क्रमशः कूदने के लिए । Z के तर्क regexes हैं, इसलिए आपको पूर्ण फ़ोल्डर नाम लिखने की भी आवश्यकता नहीं है।


3

अपडेट (2016): मैं अब इसके लिए एफएएसडी का उपयोग करता हूं , जो आपके नवीनतम निर्देशिकाओं के आधार पर फजी खोज की अनुमति देता है।


मैंने इसके लिए एक उपकरण बनाया है, रूबी में। यह आपको अपनी परियोजनाओं की घोषणा करने के लिए YAML फ़ाइलों का उपयोग करने की अनुमति देता है।

मैंने यहाँ इसके बारे में एक छोटा लेख लिखा है: http://jrnv.nl/switching-projects-terminal-ickly/

मैंने GitHub पर स्रोत भी पोस्ट किया है: https://github.com/jeroenvisser101/project-switcher


2

मैं कई वर्षों से इसे प्रबंधित करने के लिए अपनी स्वयं की उपयोगिता cdhist का उपयोग कर रहा हूं । यह आपके cd कमांड को एलियास करता है और स्वचालित रूप से एक डायरेक्टरी स्टैक रखता है।


2

आप exportअपनी निर्देशिका पथों को चर में निर्दिष्ट करने के लिए उपयोग कर सकते हैं और फिर उन्हें संदर्भित कर सकते हैं।

export dir1=/Project/Warnest/docs/
export dir2= ~/Dropbox/Projects/ds/test/
cd $dir1
cd $dir2

हां, यह कुछ पसंदीदा डायरियों के लिए पर्याप्त है। कोई अन्य उपयोगिताओं को स्थापित करने की आवश्यकता नहीं है। बस exportबयानों को अपने में रखो ~/.bashrc, और वे हमेशा उपलब्ध रहेंगे।
वारबैंक

1

यहाँ कुछ सुझाव:

अधिकांश प्रत्यक्ष विचार, मैं .profile फ़ाइल में अन्य नाम जोड़ूंगा

vi ~/.profile
alias dir1='cd /myhome/onedir'
alias dir2='cd /jimmy/anotherdir'

तो उपयोग $ dir1 या dir2, सीडी कर सकते हैं

यदि आप हमेशा दो dirs में ही स्विच कर रहे हैं। उपयोग करने cd -से उनके बीच स्विच होगा।


1

इस स्थिति के लिए मैं जिस समाधान का उपयोग करता हूं वह है screen। स्क्रीन शुरू करें और प्रत्येक निर्देशिका के लिए एक विंडो बनाएं C-a cऔर वहां नेविगेट करें। विंडोज़ के साथ बदलें / निर्देशिकाओं के साथ C-a nया C-a p। खिड़कियों को नाम दें C-a A। तब आप अपनी विंडो की सूची पॉप अप कर सकते हैं C-a "और विंडो नंबर या नाम का उपयोग करके नेविगेट कर सकते हैं। चूंकि यह है screen, आप अपने कार्य स्थान को बचाने वाले सत्र से अलग कर सकते हैं और बाद में उसी सेट अप के साथ फिर से संलग्न कर सकते हैं।


1

ऐसा लगता है कि आपको जो चाहिए वह मूल रूप से आपके वर्कफ़्लो के लिए एक प्रोजेक्ट फ़ाइल है। निर्देशिकाओं के साथ जो आपकी गतिविधि से संबंधित हैं, जैसे प्रोग्रामिंग IDE में। Zsh नेविगेशन उपकरण और n-cdवहाँ उपकरण का प्रयास करें । यह आपको पिछले विज़िट किए गए फ़ोल्डरों में नेविगेट करने और Hotlistअपनी पसंद की निर्देशिकाओं के साथ परिभाषित करने की अनुमति देगा :

एन-सीडी

n-cd के साथ एक महत्वपूर्ण संयोजन के लिए बाध्य किया जा सकता है:

zle -N znt-cd-widget

bindkey "^ T" znt-cd-widget


1

टी एल; डॉ

  1. एक का प्रयोग करें Fishइंटरैक्टिव खोल के लिए है कि आप तुरंत सशक्त ( fish> zsh> bash)।
  2. उपयोग POSIX/ Bashस्क्रिप्टिंग के लिए सबसे व्यापक रूप से समर्थित वाक्य रचना है कि ( POSIX> Bash> Zsh> Fish)।

गोले

यहां विभिन्न गोले का परीक्षण करने के बाद मेरी प्रतिक्रिया है (परीक्षण / गोद लेने के क्रम में):

  • Bash:
    • ऑटो-पूरा: बुनियादी;
    • पथ विस्तार: नहीं;
    • पटकथा: उत्कृष्ट।
  • Zsh+ oh-my-zsh:
    • ऑटो-पूरा: अच्छा (साइकिल चलाना);
    • पथ विस्तार: हाँ ( cd /e/x1cd /etc/X11/);
    • पटकथा: अच्छा।
  • Fish+ oh-my-fish(वर्तमान) बॉक्स से बाहर सबसे अच्छा है:
    • ऑटो-समापन: देशी और समर्थित विकल्प;
    • पथ विस्तार: हाँ;
    • स्क्रिप्टिंग: POSIX- संगत से बहुत अधिक अंतर।

सार्थक उपनामों का उपयोग करें

प्रत्येक शेल का उपयोग करके विस्तार किया जा सकता है functionऔर alias, यहां मैं आपके मुद्दे से संबंधित (POSIX- संगत) का उपयोग कर रहा हूं:

back () {  # go to previous visited directory
        cd - || exit
}

up () {  # go to parent directory
        cd ..|| exit
}

याद रखने और स्वत: पूर्ण होने के लिए मूल, लेकिन वास्तव में अर्थपूर्ण हैं।

अपने खोल को जानो

CDPATHअपनी सबसे अधिक उपयोग की गई निर्देशिकाओं (जैसे ~/projects/, /etc/init.d/) को जोड़ने के लिए कॉन्फ़िगर करें ताकि आप जल्दी से उन पर कूद सकें।

पर विस्तृत विवरण के लिए मैनटवर्क जवाबCDPATH देखें ।

Hangout और पढ़ें


जब कोई शेल फ़ंक्शन कॉल करता है exit, तो आप इंटरेक्टिव शेल से बाहर निकलते हैं। वे "सार्थक उपनाम" बस हो सकते हैं alias back='cd -'और alias up='cd ..'- लेकिन चिंता न करें, वे आदेश कभी भी गलत नहीं लौटेंगे (कोई पिछली निर्देशिका नहीं है; यह आपको घर भेजता है! पहले से ही जड़ में है! यह एक नो-ऑप है!) और इसलिए आप कभी भी बाहर नहीं निकलेंगे। । इस पर भी विचार करें alias back='cd $OLDPWD'(एकल उद्धरणों पर ध्यान दें) क्योंकि इसका कोई आउटपुट नहीं होगा ( cd -आपको बताता है कि यह आपको कहां भेज रहा है, जो आपके संकेत के बाद से अनावश्यक है, इसकी जानकारी है)
एडम काट्ज

1

ancएक cmd लाइन टूल (एंकर के लिए छोटा) है, जो निर्देशिकाओं के बुकमार्क रखता है। (अभी तक केवल बैश के साथ परीक्षण किया गया था)

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

anc a /Project/Warnest/docs/ ~/Dropbox/Projects/ds/test/

यह एंकर (थिंक बुकमार्क) सूची में दोनों निर्देशिकाओं को जोड़ता है

अब यदि आप /Project/Warnest/docs/अपने सिस्टम प्रकार पर कहीं से भी कूदना चाहते हैं :

anc Warn

और यदि आप ~/Dropbox/Projects/ds/test/टाइप करना चाहते हैं :

anc ds test

बुकमार्क किए गए रास्तों के विरुद्ध टेक्स्ट के मिलान के अलावा, निर्देशिका के चारों ओर कूदने के लिए कई अन्य सुविधाजनक तरीके हैं।

anc i

इंटरेक्टिव मोड शुरू करता है, जो सभी बुकमार्क को नंबर से सूचीबद्ध करता है, इसलिए आपको केवल टाइप करना है नंबर

यदि आप टाइप करते हैं:

anc Pro[TAB]

सभी बुकमार्क (आपके मामले में दोनों बुकमार्क) से मेल खाती एक सूची दिखाई जाती है और आप इसे अपने तीर कुंजी का उपयोग करके चुन सकते हैं, यह एक बहुत ही त्वरित और सहज तरीका है।

प्रोजेक्ट के github पेज पर anc प्राप्त करें: https://github.com/tobimensch/anc

उदाहरण के उपयोग के साथ एक README भी है।

पूर्ण प्रकटीकरण: मैं इस स्क्रिप्ट का लेखक हूं। मुझे उम्मीद है कि कुछ लोग इसे उपयोगी पाएंगे।

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