टाइपिंग निर्देशिकाओं को बदलते समय कम से कम कैसे करें?


5

कमांड लाइन पर विभिन्न निर्देशिकाओं के बीच स्विच करना आसान बनाने के लिए कुछ अच्छे लिनक्स कमांड क्या हैं?

मुझे अक्सर अलग-अलग निर्देशिकाओं के बीच लंबे नामों के साथ स्विच करना पड़ता है, जैसे

cd foo/20100801-rev124-test2
ls 
cd ../20100801-rev124-test1
ls 
cd ../20100802-rev126-bar

आमतौर पर, मैं टैब पूर्णता का उपयोग करता हूं, इसलिए यह कुछ इस तरह है:

cd ../2010080<TAB>2<TAB>-rev12<TAB>6-<TAB>bar

लेकिन यह कष्टप्रद है क्योंकि ये सभी नाम समान हैं, इसलिए टैब पूरा होने से वास्तव में बहुत काम नहीं बचा है।

ऐसी स्थितियों में टाइपिंग को कम करने के लिए आप किन ट्रिक का उपयोग करते हैं?

BTW, मैं pushdऔर popdकभी-कभी उपयोग करता हूं , लेकिन यहां यह बहुत मदद नहीं करेगा क्योंकि मैं दिए गए क्रम में निर्देशिकाओं का दौरा नहीं करता हूं।

अद्यतन करें:

एक अच्छे समाधान के लिए, मेरे अन्य, संबंधित प्रश्न का स्वीकृत उत्तर देखें । मूल रूप से, बस एक वैकल्पिक कमांड बनाएं :cd

function cd2 { select a in $1*; do cd $a; break; done }

यह एक ही बार में सभी संभावित पूर्णताओं को सूचीबद्ध करेगा:

$ cd2 2010080
(1) 20100801-rev124-test2
(2) 20100801-rev124-test1
(3) 20100802-rev126-bar

और आप इसकी संख्या टाइप करके चुन सकते हैं।


हम्म, जब तक कि समाधान को बैश स्क्रिप्ट या समान के साथ आने की आवश्यकता न हो।
dehmann 15

बुकमार्क और टर्मिनल एकीकरण के साथ एक अच्छे फ़ाइल प्रबंधक का उपयोग करें। इसके अलावा उपनाम ".." माता-पिता को जाना है ताकि आपको "सीडी .." टाइप न करना पड़े। और टाइपिंग को बचाने के लिए सिमिलिंक बनाएं।
neoneye

@neoneye: बुकमार्क और टर्मिनल एकीकरण के साथ एक फ़ाइल प्रबंधक अच्छा होगा। मुझे कोई नहीं मिल रहा है; क्या आपके पास एक लिंक है?
dehmann

1
मैं मैक का उपयोग करता हूं .. हालांकि कुछ फाइल मैनेजर जो लिनक्स के लिए उपलब्ध हैं, जो कि सबसे अधिक संभावना है: डॉल्फिन, वर्कर। टेक्स्टमोड के लिए मिडनाइट कमांडर है।
नीनी

alias rotd='pushd -0'फिर rotdनिर्देशिका स्टैक को घुमाने के लिए उपयोग करें।
ctrl-alt-delor

जवाबों:


3

dirs -vआदेश प्रत्येक निर्देशिका के सामने संख्या के साथ निर्देशिका ढेर सूची जाएगा, और आप के लिए एक नंबर तर्क दे सकते हैं pushdयह है कि निर्देशिका के लिए कूद करने के लिए आदेश। उदाहरण के लिए, यदि यह dirs -vदर्शाता है कि जिस निर्देशिका को आप उसके 2सामने बदलना चाहते हैं (यानी, सूची में तीसरी निर्देशिका है), निष्पादन pushd +2उस निर्देशिका में बदल जाएगा।

टाइपिंग को बचाने के लिए, आप उन्हें इस तरह से उपनाम देकर उन कमांडों को छोटा कर सकते हैं:

alias dv="dirs -v"
alias pd=pushd

2

आप वाइल्डकार्ड का उपयोग कर सकते हैं:

cd ../*test1 or even cd *t1
cd ../2010*test2
cd ../*bar

वे बहुत अधिक flexibles हैं और आपको प्रत्येक अलग स्थिति के लिए स्क्रिप्ट की योजना बनाने की आवश्यकता नहीं है, एक बार जब आप उनके लिए उपयोग किए जाते हैं, तो आप उन्हें सभी प्रकार की निर्देशिकाओं के लिए उपयोग करेंगे। उदाहरण:

cd /e*/n*k will take you to /etc/network
cd /h* to /home

वे कहीं lsभी उपयोग करने योग्य हैं ( निश्चित रूप से भी ताकि आप फ़िल्टर कर सकें कि क्या देखना है)

जंगली जानवरों को मारना


ग्लोब मैच कितने फ़ाइल पैटर्न के आधार पर यह उपयोगी हो सकता है या नहीं भी हो सकता है। यदि आपके पास है /hard_diskतो cd /h*कम उपयोगी है।
रिच होमोलका

यकीन है, लेकिन अगर आप इन आदेशों का उपयोग करते हैं, तो आप जल्दी से पता लगा लेते हैं कि मैच क्या है और यह लगभग हमेशा पूर्ण टाइपिंग से छोटा है और आप लिंक में अन्य वाइल्डकार्ड का उपयोग कर सकते हैं। आपके उदाहरण में, होगा cd /ho*और हाँ ... मैं मानता हूँ कि यह सबसे अच्छा नहीं है! :) लेकिन यह बहुत अधिक अपवाद है और ओपी का मामला नहीं है क्योंकि उनकी निर्देशिका के नाम लंबे हैं
laurent

1
  1. आपके द्वारा निष्पादित सभी आदेशों के इतिहास को लाने के लिए हिस्ट कमांड का उपयोग करने का प्रयास करें।
  2. प्रत्येक निर्देशिका के लिए cd कमांड के साथ एक शेल स्क्रिप्ट बनाएं जिसे आप अक्सर cd करते हैं।

1
  • टैब पूरा करना
  • इतिहास पहुंच (विशेषकर उन गोले में जो तीर कुंजी तक पहुंच प्रदान करते हैं)
  • बैश में, उपयोग करने पर विचार करें popdऔरpushd

धन्यवाद! तीर क्या कुंजी प्रदान करते हैं?
dehmann

1
बैश, टीसीएच। शायद zsh। शायद कुछ और। बस कोशिश करके शुरू करें। यदि वह काम नहीं करता है, तो दस्तावेज की जांच करें। "इतिहास" के लिए खोजें और संभवतः "रीडलाइन" के लिए।
dmckee

ओह, आप तीर कमान द्वारा पिछले आदेश तक पहुँचने का मतलब है। ठीक है, मैं उस का उपयोग कर रहा हूँ bash में। मैंने सोचा था कि आप तीर कुंजी का उपयोग करके टैब पूरा करने वाले उम्मीदवारों में से एक का उपयोग कर रहे हैं।
dehmann

1
नई पर्याप्त सीमाएं अन्य रीडलाइन सुविधाओं का भी समर्थन करती हैं जैसे C-rवृद्धिशील इतिहास खोज। के रूप में हर खोल अलग है प्रलेखन अपने दोस्त है।
dmckee

1
मैं वर्षों से बैश का उपयोग कर रहा हूं और केवल C-rपिछले कुछ महीनों में खोजा गया है। बड़ी अदभुत बात है।
डग हैरिस

1

इस तरह के एक प्रश्न में, मैं यह उल्लेख करना चाहूंगा कि आप किस शेल का उपयोग करते हैं। प्रत्येक शेल में थोड़ा अलग उपकरण होते हैं। यहाँ मेरे उत्तर बैश पर लागू होते हैं, जो कि आप शायद उपयोग कर रहे हैं ।

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

मुझे लगता है कि 'उर्फ' आपका दोस्त है। कुछ ऐसा जोड़ें:

alias CD_test2-'cd /absolute/path/to/foo/20100801-rev124-test2'

अपने .bashrc (या .kshrc या zshrc) पर जाएं

bash में env var भी है CDPATH, जिसे रिश्तेदार पथ में cd'ing के लिए एक एंकर के रूप में उपयोग किया जा सकता है। उदाहरण के लिए:

CDPATH=/usr:.; cd bin

देख सकता है कि वहाँ एक है /usr/binऔर तुम वहाँ डाल दिया, तो अगर नहीं, तुम में डाल दिया ./bin। यह संभवत: आपकी मदद नहीं करेगा, क्योंकि आपको संभवतः इस काम के लिए पूरे उपखंड को टाइप करना होगा:

CDPATH=/root/to/all/testing/dirs:.; cd 20100801-rev124-test2

मेथिंस उर्फ ​​सबसे अच्छा है जो आपको मिल सकता है, कम से कम बैश में। Zsh में बेहतर उपकरण हो सकते हैं।


मुझे नहीं लगता कि स्क्रिप्ट यहां सबसे अच्छा तरीका है, लेकिन आप स्क्रिप्ट को निर्देशिका बदलने के लिए उपयोग कर सकते हैं यदि आप इसे कॉल कर रहे हैं . my_cd_scriptऔर cdस्क्रिप्ट में कमांड डालते हैं ।
लौरेंट

1

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

एक और कीस्ट्रोक सेवर शेल के CDPATHचर का उपयोग करना है (यह अधिकांश शेल में उपलब्ध है)।

CDPATH=/some/top/dir:/another/one
cd foo

यदि वर्तमान निर्देशिका में "फू" मौजूद है, तो cdआपको वहां ले जाएगा। यदि नहीं, तो यह निर्देशिकाओं को CDPATHखोजेगा और आपको पहले "फू" में ले जाएगा, जो वहां मिलती है।


0

quickcd बहुत अच्छी टाइपिंग को बचाकर डायरेक्टरी को जल्दी से बदलने के लिए एक अच्छी स्क्रिप्ट है।



0

anc बिल्कुल उस उपयोग के मामले के लिए डिज़ाइन किया गया था।

https://github.com/tobimensch/anc

यहाँ README.md से एक अंश है:

उदाहरण: # वर्तमान निर्देशिका को डिफ़ॉल्ट एंकर बनाएं: $ ac s

# go to /etc, then /, then /usr/local and then back to the default anchor:
$ cd /etc; cd ..; cd usr/local; anc

# go back to /usr/local :
$ anc b

# add another anchor:
$ anc a $HOME/test

# view the list of anchors (the default one has the asterisk):
$ anc l
(0) /path/to/first/anchor *
(1) /home/usr/test

# jump to the anchor we just added:
# by using its anchor number
$ anc 1
# or by jumping to the last anchor in the list
$ anc -1

# add multiple anchors:
$ anc a $HOME/projects/first $HOME/projects/second $HOME/documents/first

# use text matching to jump to $HOME/projects/first
$ anc pro fir

# use text matching to jump to $HOME/documents/first
$ anc doc fir

# add anchor and jump to it using an absolute path
$ anc /etc
# is the same as
$ anc a /etc; anc -1

# add anchor and jump to it using a relative path
$ anc ./X11 #note that "./" is required for relative paths
# is the same as
$ anc a X11; anc -1

# using wildcards you can add many anchors at once
$ anc a $HOME/projects/*

# use shell completion to see a list of matching anchors
# and select the one you want to jump to directly
$ anc pro[TAB]

पूर्ण प्रकटीकरण: मैं एक लेखक हूँ


0

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

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