เปลี่ยนไดเรกทอรี (cd) แต่โดยการแทนที่ส่วนของเส้นทางเท่านั้น


14

ไม่แน่ใจว่าเป็นไปได้หรือไม่ แต่ดูเหมือนว่าฉันจะจำได้ตั้งแต่สมัยโบราณโดยใช้ AIX มันเป็นไปได้ที่จะเปลี่ยนเส้นทางของฉันโดยเพียงบอกว่าส่วนใดของเส้นทางที่ต้องถูกแทนที่ด้วยอย่างอื่น เช่นสมมติว่าฉันมีสองเส้นทาง:

/etc/application-2.0.1/options/default

และ

/etc/application-1.0.8/options/default

ที่ฉันสามารถเปลี่ยนจากโฟลเดอร์ 1 เป็น 2 โดยใช้คำสั่งเช่น

cd /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
koushik

1
คำตอบของ RandomMonkey ทำให้ฟังก์ชั่นการทดแทนเส้นทางแบบเต็มภายใน Bash ของ "cd" ในตัว
kmarsh

9

นี้จะทำงานในทุบตีบน Ubuntu cd ${PWD/old/new}10.04: โดยทั่วไปนี้แทนที่เกิดขึ้นครั้งแรกของ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 ในตัว
kmarsh

8

ฉันใช้คุณสมบัตินี้แล้ว (และพลาด) ขึ้นอยู่กับรสชาติและ / หรือการเปิดตัวของ * ระวังที่คุณใช้ หากคุณใช้ bash ต่อไปนี้เป็นวิธีที่สะดวกในการขยาย builtin cd เพื่อรวมฟังก์ชันนี้ วางสิ่งนี้ใน. bashrc ของคุณ (หรือเพื่อทดสอบวางใน bash shell ของคุณและกด Enter)

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

7

คุณอาจจำการขยายประวัติได้ ผมไม่ทราบว่าสิ่งที่มีอยู่ในเปลือกของคุณบน AIX ^2.0.1^1.0.8แต่วิธีหนึ่งที่จะทำเช่นนี้ในทุบตีเป็น

การขยายประวัติมีประโยชน์น้อยกว่าด้วยเชลล์เช่น bash และ zsh ที่มีการแก้ไขบรรทัดคำสั่งที่มีประสิทธิภาพ คุณสามารถใช้ปุ่มลูกศรเพื่อเรียกคืนคำสั่งก่อนหน้าและAlt+ .เพื่อแทรกคำสุดท้ายของคำสั่งก่อนหน้า (กดสองครั้งเพื่อเข้าถึงคำสั่งก่อนหน้านั้นเป็นต้น)


คุณจะต้องกดครั้งที่สองถ้าhistverifyตัวเลือกในการshoptเปิดอยู่
หยุดชั่วคราวจนกว่าจะมีการแจ้งให้ทราบต่อไป

@Dennis: ขอบคุณฉันลืม--norcเมื่อทดสอบ
Gilles 'หยุดความชั่วร้าย'

3

หากคุณเป็นแฟน vi คุณสามารถเปิดใช้งานโหมด vi ในเชลล์ของคุณ (เช่น bash set -o vi เป็นต้น) และใช้โหมดคำสั่งของ vi ...

หรือคุณสามารถทำการขยายประวัติศาสตร์บ้า (ทดสอบใน zsh, บางทีใน bash เช่นกัน):

$ 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 ทดสอบด้วยการทุบตีและทำงานได้ดีเช่นกัน
maxschlepzig

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

ไม่แน่ใจเกี่ยวกับ AIX แต่ฉันจำได้ว่านี่เป็นเคล็ดลับ Korn เชลล์เก่าในกล่อง Solaris ที่ฉันใช้ในการจัดการ ในตัวอย่างของคุณคุณจะต้องพิมพ์คำสั่ง:

cd 2.0.1 1.0.8

บางข้อมูลเพิ่มเติมที่นี่


สิ่งนี้ใช้ไม่ได้กับฉัน: ubuntu 10.04, ทุบตี "GNU ทุบตี, เวอร์ชั่น 4.1.5 (1) -release (i486-pc-linux-gnu)" ฉันลองคำสั่งต่อไปนี้: 2048 cd 2049 cd ~ / src / local -ubuntu-patches / cdtest / dir-v1.0.9 / gnome-control-center-2.30.1 / capplets / network / 2050 cd dir-v1.2.9 dir-v1.0.9 / home / ing02741 / src / local-ubuntu- patches / cdtest / dir-v1.2.9 / gnome-control-center-2.30.1 / capplets / network เป็นพา ธ ที่ถูกต้อง
koushik

@koushik: เขาเขียนว่ามันเป็นเคล็ดลับของ Korn คุณกำลังใช้ทุบตี bash! = korn ภายใต้ Ubuntu ksh สามารถใช้ได้ผ่านแพ็คเกจ 'ksh'
maxschlepzig

opps ฉันไม่ดี ขออภัยฉันมองข้ามสิ่งนี้ @maxschlepzig - ขอบคุณที่ชี้ให้เห็น
koushik
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.