परिवर्तन निर्देशिका (सीडी) लेकिन केवल पथ का एक हिस्सा बदलकर


14

यह निश्चित नहीं है कि क्या यह संभव है, लेकिन मुझे लगता है कि मेरे पुराने दिनों से AIX का उपयोग करके यह याद रखना संभव था कि मेरा मार्ग केवल यह कहकर बदल सकता है कि पथ के किस हिस्से को किसी और चीज़ से बदलने की आवश्यकता है। उदाहरण के लिए, मान लें कि मेरे पास दो रास्ते हैं:

/etc/application-2.0.1/options/default

तथा

/etc/application-1.0.8/options/default

कि मैं एक आदेश का उपयोग करके फ़ोल्डर 1 से 2 तक स्विच कर सकता हूं

सीडी / 2.0.1/1.0.8/

जो बदलेगा, पथ में, स्ट्रिंग 2.0.1को 1.0.8। जाहिर है यह अब मेरे लिए काम नहीं करता है। लेकिन क्या ऐसा करने का कोई तरीका है?

जवाबों:


11

यदि आप zsh का उपयोग शेल के रूप में करते हैं तो आप बस प्रवेश कर सकते हैं cd 1.0.8 2.0.1


यह मुझे सबसे अच्छा विकल्प लगता है। अब देख रहे हैं कि उस चीज को कैसे स्थापित किया जाए :)
nathanvda

1
sudo apt-get install zsh
कौशिक

1
रैंडममॉन्की का जवाब बश के "सीडी" बिल्ट-इन के भीतर पूर्ण पथ प्रतिस्थापन कार्यक्षमता की अनुमति देता है।
km

9

यह ubuntu 10.04 पर बैश में काम करना चाहिए cd ${PWD/old/new}:। मूल रूप से इस की पहली आवृत्ति को बदल देता है oldअपने में वर्तमान कार्यशील निर्देशिका के साथ new। नीचे 2 उदाहरण।

उदाहरण 1

ing02741@hoster:~$ cd /home/ing02741/Videos/
ing02741@hoster:~/Videos$ cd ${PWD/ing02741/koushik}
ing02741@hoster:/home/koushik/Videos$ 

उदाहरण 2

ing02741@hoster:~/src/cdtest$ mkdir dir-v1.0.1 dir-v2.2.2 dir-v3.0.7
ing02741@hoster:~/src/cdtest$ mkdir dir-v1.0.1/ind dir-v2.2.2/ind dir-v3.0.7/ind
ing02741@hoster:~/src/cdtest$ cd dir-v1.0.1/ind/
ing02741@hoster:~/src/cdtest/dir-v1.0.1/ind$ cd ${PWD/1.0.1/2.2.2}
ing02741@hoster:~/src/cdtest/dir-v2.2.2/ind$ 

ऊपर sepp2k के विचार पर उधार लेना, आप इस तरह से एक समारोह बना सकते हैं

function mycd { cd ${PWD/$1/$2} }

और फिर mycd 2.0.1 1.0.8स्विच करने के लिए कुछ का उपयोग करें।


1
यह वहाँ 1/2 रास्ता है। यदि आप RandomMonkey के उत्तर को देखते हैं, तो आप देखेंगे कि Bash Cd बिल्ट-इन के भीतर पूर्ण कार्यक्षमता संभव है।
km

8

मैंने स्वयं इस सुविधा का उपयोग (और चूक) किया है। यह निर्भर करता है कि आप किस स्वाद और / या निक्स का उपयोग कर रहे हैं। यदि आप बैश का उपयोग करते हैं, तो इस कार्यक्षमता को शामिल करने के लिए बिलिन सीडी का विस्तार करने का एक आसान तरीका है। इसे अपने .bashrc में डालें (या इसे अपने बैश शेल और हिट एंटर में पेस्ट करने के लिए टेस्ट करें)।

function cd() { if [ $# -eq 2 ]; then builtin cd ${PWD/$1/$2}; else builtin cd $1; fi }

7

आप शायद इतिहास विस्तार को याद कर रहे हैं। मुझे नहीं पता कि AIX पर आपके शेल में क्या उपलब्ध था, लेकिन बैश में ऐसा करने का एक तरीका है ^2.0.1^1.0.8

इतिहास विस्तार बैश और ज़श जैसे गोले के साथ कम उपयोगी है जिनकी शक्तिशाली कमांड लाइन संपादन है। आप पिछले आदेशों को याद करने कुंजी तीर का उपयोग कर सकते हैं और Alt+ .पिछला आदेश की अंतिम शब्द डालने के लिए (प्रेस इसे दो बार उससे पहले आदेश तक पहुँचने और इतने पर करने के लिए)।


यदि histverifyविकल्प shoptचालू है तो आपको केवल दूसरी बार दर्ज करना होगा ।
अगली सूचना तक रोक दिया गया।

@ डेनिस: धन्यवाद, --norcपरीक्षण के समय मैं भूल गया था ।
गिल्स एसओ-

3

यदि आप एक vi प्रशंसक हैं, तो आप अपने शेल में vi मोड को सक्षम कर सकते हैं (उदाहरण के लिए -o vi सेट करें) और mi के कमांड का उपयोग करें ...

या आप पागल इतिहास विस्तार कर सकते हैं (zsh में परीक्षण किया गया, शायद बैश में भी):

$ cd /etc/application-1.0.8/options/default
cd: no such file or directory: /etc/application-1.0.8/options/default

$ !!:s/1.0.8/2.0.1/
cd /etc/application-2.0.1/options/default
cd: no such file or directory: /etc/application-2.0.1/options/default

Btw, यह बैश में परीक्षण किया और यह वहाँ भी काम करता है।
मैक्सक्लेपजिग

3
cd `pwd | sed 's/2\.0\.1/1\.0\.8/'`

हालांकि यह बहुत सुंदर नहीं है। इसे किसी फंक्शन में लगाकर आप इसे थोड़ा बढ़ा सकते हैं:

function mycd { cd `pwd | sed s$1` }

और फिर इसे कॉल करना जैसे:

mycd '/2\.0\.1/1.0.8/'

आपको अभी भी डॉट्स से बचने की आवश्यकता है, लेकिन मुझे यकीन है कि यह थोड़ा सोचा के साथ काम किया जा सकता है।


आप निश्चित रूप से प्रतिस्थापन के दाईं ओर डॉट्स से बचने की आवश्यकता नहीं है। ज्यादातर मामलों में, बाईं ओर डॉट्स से बचना हानिरहित भी होगा, जब तक कि आपको समान नाम वाले फ़ोल्डर का बहुत कुछ नहीं मिला हो।
frabjous

3
 ^2.0.1^1.0.8 

उपरोक्त कमांड स्वैप पिछले कमांड में 2.0.1 से 1.0.8 है, इसका काम बैश में है


2

यह सुनिश्चित करने के लिए कि -P|-L|-काम निम्नलिखित का उपयोग करें:

function cd () {
    typeset arg=
    case $1 in -|-L|-P) arg=$1 ; shift ;; esac
    [ $# -gt 1 ] && {
        builtin cd $arg "${PWD/$1/$2}"
    } || {
        builtin cd $arg "$@"
    }
}

1

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

cd 2.0.1 1.0.8

कुछ और जानकारी यहाँ


यह मेरे लिए काम नहीं किया: ubuntu 10.04, bash "GNU bash, संस्करण 4.1.5 (1) -release (i486-pc-linux-gnu)", मैंने निम्नलिखित आदेशों की कोशिश की: 2048 सीडी 2049 सीडी ~ / src / स्थानीय -बंटू-पैच / cdtest / dir-v1.0.9 / सूक्ति-नियंत्रण-केंद्र-2.30.1 / capplets / नेटवर्क / 2050 सीडी dir-v1.2.9 dir-v1.0.9 / घर / औसत 04141 / src / local-ubuntu पैच / cdtest / dir-v1.2.9 / gnome-control-center-2.30.1 / capplets / नेटवर्क एक मान्य पथ है।
कौशिक

@koushik: उन्होंने लिखा है कि यह एक कर्न शेल चाल है। आप बैश का उपयोग कर रहे हैं। बैश! = कोर्न। उबंटू के तहत ksh पैकेज 'ksh' के माध्यम से उपलब्ध है।
मैक्सक्लेपजिग

opps, मेरा बुरा। क्षमा करें, मैंने इसे अनदेखा कर दिया। @maxschlepzig - इशारा करने के लिए धन्यवाद।
कौशिक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.