จะย้ายเข้าและออกจากไดเรกทอรีที่ซ้อนกันอย่างรวดเร็วผ่าน CLI ได้อย่างไร


16

เรารู้ว่าการใช้cd <directory>จะเปิดไดเรกทอรีถ้ามีอยู่!

นอกจากนี้cd ..จะเพิ่มระดับหนึ่งจากไดเรกทอรีการทำงานปัจจุบัน

แต่เมื่อเรามีผบซ้อนกันมีเส้นทางอีกต่อไปเหมือน/home/thina/teams/td/tech/app/release/apksมันจะเหนื่อยเพียงแค่ไปลงในโฟลเดอร์และมันเป็นเรื่องยากที่จะได้รับกลับไปยังโหนดอื่นพูดนี่apks/home/thina/teams

มีวิธีข้ามการพิมพ์cdและcd ..? ฉันใช้ Ubuntu 16.04


อ้อ! มีวิธีข้ามการพิมพ์cdและcd ..?
gsthina

@GSURENDARTHINA ฉันคิดว่าคุณรู้ว่าคุณสามารถบันทึกการกดแป้นอย่างน้อยไม่กี่ครั้งโดยกลับไปหลายระดับพร้อมกันเช่นในกรณีของคุณcd ../../../../..
underscore_d

2
symlink เป็นตัวเลือกหรือไม่?
กระเป๋า

1
คุณอาจต้องการดูCDPATHตัวแปรในbashเอกสาร
chepner

ในกรณีที่คุณไม่ได้ตระหนักถึง: คุณสามารถทำ "cd <directory>" สำหรับไดเรกทอรีใด ๆ ในไดเรกทอรีทำงานปัจจุบัน - เพียงแค่ไม่เริ่มต้นด้วยเครื่องหมายทับ ดังนั้นสำหรับตัวอย่างของคุณถ้าไดเรกทอรีการทำงานของคุณในปัจจุบันคือ "/ home / thina / teams / td / tech / app / release" คุณแค่พิมพ์ "cd apks"
jcadcell

คำตอบ:


30

มีpushdและpopd:

pushd /home/thina/teams/td/tech/app/release/apks
# current directory now /home/thina/teams/td/tech/app/release/apks
popd
# current directory now what it was before pushd command

ลองhelp pushdและhelp popdสำหรับตัวเลือกเพิ่มเติม ไม่มีmanหน้าเพราะpushdและpopdเป็นคำสั่งในตัวของ bash


5
จะไม่cd -ทำสิ่งเดียวกันหรือไม่
edwinksl

5
@ edwinksl ใช่ แต่pushdและpopdสามารถจำเส้นทางก่อนหน้าได้มากกว่าหนึ่งเส้นทาง
Jos

8
อย่าลืมdirsแสดงรายการไดเรกทอรีสแต็กของคุณภายในpushd/ popdคำสั่ง
Arronical

4
สิ่งเหล่านี้จะกล่าวถึงในหน้าคู่มือสำหรับ bash-builtins (7) เนื่องจากเป็นคำสั่งในตัวของ bash (หรือพวกเขาสามารถพบได้ในหน้าคู่มือเต็มรูปแบบสำหรับทุบตี ) มันเป็นข้อมูลเดียวกับhelp pushdและhelp popdคุณพูดถึง (รวมทั้งhelp dirs) แต่ฉันคิดว่าฉันจะพูดถึงว่าในกรณีที่คนสงสัยว่าคำสั่งเหล่านี้มาจากไหน
มอนแทนา

2
@Jos you misspelledhelp pusdh
Sergiy Kolodyazhnyy

16

นอกจากคำตอบที่ดีมากที่มีให้แล้วต่อไปนี้เป็นเคล็ดลับในการใช้cdอย่างมีประสิทธิภาพ

  • cd - จะนำคุณกลับไปยังไดเรกทอรีสุดท้ายที่คุณอยู่
  • cd ../../..จะนำคุณขึ้น 3 ระดับในครั้งเดียวคุณสามารถใช้ ..สัญลักษณ์ที่ถูกล่ามโซ่ไว้ด้วยกันเพื่อ 'เลื่อนขึ้น' ไดเรกทอรีได้มากเท่าที่คุณต้องการ
  • หากคุณไม่แน่ใจว่าต้องการเลื่อนขึ้นกี่ครั้งให้ใช้cd ..แล้วใช้ทุบตีประวัติโดยกดปุ่มลูกศรขึ้นเพื่อใช้คำสั่งอีกครั้ง
  • ใช้~เพื่อเข้าสู่ไดเรกทอรีหลักของผู้ใช้ปัจจุบันหากคุณลงชื่อเข้าใช้ด้วยชื่อผู้ใช้cd ~/teamsจะนำคุณไป/home/thina/teams
  • ใช้การเติมข้อมูลอัตโนมัติของ Bash สำหรับเส้นทางปุ่มแท็บจะทำให้ส่วนของเส้นทางในcdคำสั่งสมบูรณ์หากคุณพิมพ์ส่วนหนึ่งของส่วนเส้นทางที่ตามด้วยTabส่วนนั้นจะเสร็จสมบูรณ์หากไม่มีตัวเลือกอื่นที่ถูกต้อง ตัวอย่างเช่นหากคุณพิมพ์cd /home/thina/teams/td/tแล้วกดTabคำว่าเทคโนโลยีจะถูกเติมเต็มให้กับคุณตราบใดที่ไม่มีไฟล์หรือไดเรกทอรีอื่น ๆ ในไดเรกทอรี td ที่เริ่มต้นด้วยตัวอักษร t

การใช้เคล็ดลับเหล่านี้ร่วมกันสามารถสร้างไดเรกทอรีที่มีcdความเจ็บปวดน้อยลง


2
การเพิ่มไปยังจุดบน~โดยเฉพาะอย่างยิ่งถ้าคุณเป็นรูท~userจะนำคุณไปยังuserไดเรกทอรีบ้านได้อย่างรวดเร็ว
CVn

ขอบคุณฉันไม่ทราบว่าฉันจะเพิ่มในการแก้ไขต่อไป
59

9

ในการขึ้นไปบนต้นไม้หลาย ๆ ระดับในแต่ละครั้งคุณสามารถใช้ฟังก์ชั่นต่อไปนี้ (ขอบคุณ muru สำหรับรุ่นที่ปรับปรุงแล้ว):

up ()
{
    local old="$PWD"
    for i in $(seq "${1:-1}"); do
        cd ..
    done
    OLDPWD="$old"
}

จากนั้นคุณสามารถทำได้:

$ pwd
/home/thina/teams/td/tech/app/release/apks
$ up 5
cd'ing into /home/thina/teams

นอกจากนี้:

  • การโทรupโดยไม่มีอาร์กิวเมนต์เทียบเท่ากับcd ..เนื่องจากการ${1:-1}ทดแทนที่$1กำหนดและ1อื่น ๆ
  • การตั้งค่า OLDPWD หลังการตั้งค่าครั้งสุดท้ายcd ..เพื่อรักษาcd -พฤติกรรมตามปกติ

1
ในทางเทคนิคนี่คือฟังก์ชั่นไม่ใช่นามแฝง
Reinier โพสต์

@ReinierPost: ถูกต้อง! ฉันแก้ไขให้ถูกต้องแล้ว
parras

2
คำแนะนำ: แทน-gt เป็นพจนานุกรมเล็ก ๆ น้อย ๆ มันจะเปรียบเทียบเป็นสตริง นอกจากนี้แทนการสร้างเส้นทางทำไมไม่ทำในวง: ? ที่สามารถกำจัดสภาพได้เช่นกัน >>cd ..for i in $(seq "${1:-1}"); cd ..; doneif
muru

@muru ฉันเห็นด้วยกับgtคำพูดของคุณแต่เกี่ยวกับข้อเสนอแนะที่สองของคุณดูกระสุนสุดท้ายในคำตอบ ทำให้รู้สึกถึงฉัน
Oliphaunt - คืนสถานะโมนิก้า

1
@Oliphaunt ที่ไม่ยากโดยเฉพาะคุณเพิ่งตั้งค่าOLDPWDเส้นทางเดิม นี่เป็นเวอร์ชั่นสมบูรณ์: paste.ubuntu.com/17990874
muru

7

สำหรับชื่อไดเร็กทอรีแบบยาวให้ใช้ตัวแปรที่มีพา ธ เต็ม ตัวอย่างเช่น,

APKS="/home/thina/teams/td/tech/app/release/apks"

จากนั้นคุณสามารถทำได้ cd "$APKS"

ในการเพิ่มจำนวนไดเรกทอรี x ฉันมีฟังก์ชั่นนี้ที่กำหนดไว้ในของฉัน .bashrc

goup() # go up x number of dirs
{
  num=$1
  while [ $num -ne 0  ];do
    cd ..
    num=$( expr $num - 1   )
  done
}

หากต้องการย้อนกลับ/home/thina/teamsจากที่apksคุณต้องการ

goup  6

นี่คือตัวอย่างการใช้งาน:

$> pwd
/sys/class/backlight/intel_backlight
$> goup 3
$> pwd
/sys
$> 

อีกฟังก์ชั่นเล็ก ๆ ที่ฉันคิดขึ้นมา แต่ไม่เคยใช้มากเท่ากับbookmarkฟังก์ชั่น

นี่คือวิธีการทำงาน: จะบันทึกโฟลเดอร์ปัจจุบันของคุณเป็นไฟล์บางไฟล์จากนั้นคุณสามารถ cd ไปยังไดเรกทอรีที่ระบุตามหมายเลขบรรทัดในไฟล์นั้น ตัวอย่าง:

$> cd /etc/lightdm
$> bookmark
$> cat ~/.dirsbookmarks                                                                                                  
/home/xieerqi
/sys/class/backlight
/etc/lightdm
$> cd $( awk 'NR==2' ~/.dirsbookmarks  )                                                                                 
$> pwd
/sys/class/backlight

และนี่คือฟังก์ชันเอง:

bookmark()
{ # bookmarks current dir
  pwd >> $HOME/.dirsbookmarks
}

5

อัปเดต:มีเครื่องมือที่ทรงพลังยิ่งกว่าautojump: fasdแต่ฉันไม่คุ้นเคย


ฉันกำลังแปลกใจไม่มีใครได้กล่าวถึงautojumpเลยที่

ทำงานโดยการบำรุงรักษาฐานข้อมูลของไดเรกทอรีที่คุณใช้บ่อยที่สุดจากบรรทัดคำสั่ง(ไดเรกทอรีจะต้องเยี่ยมชมก่อนก่อนจึงจะสามารถข้ามไปได้)

โดยพื้นฐานแล้วมันเป็นสิ่งที่ @ สร้างขึ้นมาพร้อมกับตัวเลือกพิเศษบางอย่าง

ตามที่ฉันได้กล่าวถึงคำถามอื่น:

หลังจากคุณ cd สองสามครั้งไปยังไดเรกทอรี (แม้ครั้งเดียวพอเพียง):

cd /home/thina/teams/td/tech/app/release/apks

คุณสามารถใช้ทางลัดjเพื่อย้ายไปที่นั่นอย่างรวดเร็วไม่ว่าคุณจะอยู่ในไดเรกทอรีใด:

j apks

โปรดทราบว่าใช้เป็นส่วนหนึ่งของงานเส้นทางใด ๆ ตราบใดที่มันเป็นที่สูงที่สุดในรายการนี้ j appยังจะนำคุณไปถ้าคุณไปครั้งที่มีมากไปกว่า.../apks.../app

ฉันอยากจะแนะนำแทนที่จะมีสคริปต์ของคุณเองเพราะมันได้รับการดูแลรักษาอย่างดีแจกจ่ายให้กับ Ubuntu และมีคุณสมบัติที่เป็นระเบียบอื่น ๆ เช่นข้ามไปที่ลูก :

.../td/tech $ jc apk
.../release/apks $ 

ทำให้คุณย้ายเข้าไปapksอยู่tdแทนที่จะapksอยู่ใต้ต้นไม้อื่น


+1 สำหรับ 'fasd' มันมีประโยชน์จริงๆ
โทมัส

4

นามแฝง

ฉันมีรายการไดเรกทอรีที่ใช้บ่อยซึ่งมีให้โดยตรงผ่านทางนามแฝง ซึ่งรวมถึงทางลัดสำหรับไดเรกทอรีต่างๆในลำดับชั้นด้วย

alias ..='cd ..'
alias ...='cd ../..'
alias ....='cd ../../..'
alias .....='cd ../../../..'
alias cdwork=/home/knub/Repositories/work
alias cduni=/home/knub/University

ตอนนี้เมื่อฉันต้องการที่จะไปสามระดับขึ้นไปฉันพิมพ์....<Enter>และมีฉัน!


ฉันชอบสิ่งนี้เช่นกันเพราะถึงแม้ว่าในตอนแรกฉันคิดว่า "hmm 4 งวดสำหรับ 3 ระดับ ... " จากนั้นฉันก็คิดว่า "โอ้ใช่แล้ว ... คอมพิวเตอร์! 0 , 1, 2, 3!" : D จำง่ายมีประโยชน์และบางอย่างที่ฉันจะเล่นด้วย ไชโย!
P Smith

github.com/bac0n/bash_completionพร้อม bash_completion
bac0n

4

เปิดautocdตัวเลือก ( shopt -s autocd) cdเพื่อให้คุณไม่ต้องพิมพ์ ตัวอย่างเช่นคุณเพียงต้องการคำสั่งสองตัวอักษร..เพื่อไปยังไดเรกทอรีหลัก

หากคุณนำทางระหว่างสองไดเรกทอรีคุณสามารถสลับไปมาระหว่างไดเรกทอรีเหล่านั้นcd -ซึ่งจะไปยังไดเรกทอรีทำงานก่อนหน้า autocdตัวเลือกที่จะไม่ทำให้-การทำงานcd -แต่คุณสามารถกำหนดชื่อแทนหรือฟังก์ชั่นสำหรับการที่

คุณสามารถจดจำไดเรกทอรีในกองกับ builtins ที่และpushd popdbuiltin dirsแสดงรายการไดเรกทอรีสแต็ค (ฉันพบว่าdirs -vอ่านง่ายขึ้น)

หากคุณเปลี่ยนไปเป็นไดเรกทอรีย่อยของไดเรกทอรีใดไดเรกทอรีหนึ่งโดยเฉพาะและไดเรกทอรีย่อยเหล่านี้มีชื่อที่ไม่ซ้ำกันให้เพิ่มไปยังCDPATHตัวแปร อย่างไรก็ตามได้รับการเตือนว่าฉันไม่เคยพบสถานการณ์ที่CDPATHมีประโยชน์จริง ๆ

คุณสามารถตั้งค่าตัวแปรเป็นชื่อไดเรกทอรีแล้วเปลี่ยนเป็นตัวแปร$fooได้

Zsh ติดตั้ง zshมีคุณสมบัติที่ดีไม่กี่อย่างที่ทุบตีไม่ได้ บางคนสามารถเลียนแบบโดยการเขียนฟังก์ชั่นที่ทำงานเดียวกัน โดยเฉพาะอย่างยิ่งรูปแบบสองข้อโต้แย้งของcdช่วยให้คุณสะดวกเปลี่ยนไปยังไดเรกทอรีอื่นที่มีชื่อคล้ายกันเช่นจากการ/home/thina/teams/td/tech/app/release/apks/com.acme/v1ทำงานไปcd release beta/home/thina/teams/td/tech/app/beta/apks/com.acme/v1


2

อย่างที่ฉันตอบไปแล้วใน คำถามที่เกี่ยวข้องกับ UnixSE แล้วฉันใช้สคริปต์ชื่อ z [github]สำหรับสิ่งนี้

มันจำไดเรกทอรีที่คุณ cd เพื่อจัดอันดับพวกเขาตาม frecency (ความถี่ + ความใหม่) และช่วยให้คุณเปลี่ยนเป็นหนึ่งในเส้นทางที่จำได้โดยใช้บางส่วนของชื่อ

หลังจากมี cd'ed ไปยังไดเรกทอรีอย่างน้อยหนึ่งครั้งคุณสามารถทำได้เช่นแทนที่จะ:

$ cd ~user/very/long/path/with/many/subfolders/

แค่ทำ:

$ z sub

ซึ่งจะใช้งานได้โดยใช้การจับคู่ชื่อบางส่วน (สมมติว่าคุณไม่มีไดเรกทอรีอื่นที่มีคำว่า sub และมี frecency สูงกว่า)

ฉันยังกำหนดฟังก์ชันเช่นนี้ซึ่งจะลองซีดีปกติก่อนและหากล้มเหลวจะใช้ z:

function cd() {
    builtin cd "$1" 2> /dev/null || z "$1" || (echo "cd: File or Directory not found: $1" >&2 && exit 1)
}

สิ่งนี้ให้สิ่งที่ดีที่สุดสำหรับคุณ หากโฟลเดอร์อยู่ในไดเรกทอรีปัจจุบันหรือได้รับเส้นทางที่ถูกต้องเต็มรูปแบบมันจะมีเพียง cd ที่นั่น แต่หากไม่ใช่ก็จะพยายามหาคู่ที่ตรงกันในฐานข้อมูลและ cd ที่นั่น สิ่งนี้ทำให้ความเจ็บปวด (เล็ก) ของบางครั้งต้องใช้ cd (เพื่อฝึกอบรมฐานข้อมูลไปยังโฟลเดอร์ที่คุณไม่เคยไปมาก่อน) และบางครั้งก็นึกถึงการใช้ z เมื่อใช้งานได้


คุณแน่ใจหรือไม่ว่าสิ่งนี้cdของคุณไม่ได้รบกวนวิธีการzสร้างฐานข้อมูลของไดเรกทอรีที่เข้าชมบ่อยๆ
leftaroundabout

แตกต่างจากautojumpอย่างไร
Ciprian Tomoiagă

@leftaroundabout: ไม่แน่ใจ แต่จนถึงตอนนี้มันก็ใช้งานได้ดี z สร้างฐานข้อมูลอย่างแน่นอนทุกครั้งที่คุณใช้ builtin cd (ซึ่งการตั้งค่าของฉันพยายามก่อน) ไม่แน่ใจว่ามีการอัพเดทฐานข้อมูลหรือไม่เมื่อใช้ชิ้นส่วน z แก้ไข: เพิ่งทดสอบว่าฐานข้อมูลมีการปรับปรุงเมื่อทำ $ builtin cd ~ / โฟลเดอร์ / ฉัน / มี / ไม่ / รับ / ถึง / ยัง / มันคือ.
Graipher

1
@CiprianTomoiaga ดูเหมือนว่าโดยพื้นฐานแล้วจะทำสิ่งเดียวกัน การเขียนทับของคำสั่ง cd ที่ฉันใช้สามารถใช้กับสิ่งนั้นได้ คำสั่งต่าง ๆ ของการเติมข้อความอัตโนมัติดูน่าสนใจอยู่แล้ว!
Graipher

btw: ฉันไม่ใช่ผู้เขียน z แค่พบว่ามีประโยชน์มาก
Graipher

1

สามตัวเลือกเพิ่มเติมที่ฉันพบว่าทำงานได้ดี (แม้ว่าฉันอาจใช้ในอนาคตได้pushdมากขึ้นฉันเพิ่งเรียนรู้เกี่ยวกับเรื่องนี้):

  • จัดเรียงพา ธ ของคุณเพื่อที่คุณจะได้ไม่ต้องcdเข้าไปในไดเรคทอรีที่ซ้อนกันในตอนแรกหรือมากกว่า: ดังนั้นตำแหน่งที่คุณต้องไปเยี่ยมมักจะอยู่ที่ปลายนิ้วของคุณ วิธีที่จะทำให้เกิดสิ่งนี้ได้คือsymlink : เก็บไดเรกทอรีที่ชัดเจนและมีลำดับชั้นไว้เหมือนเดิม แต่สร้างลิงก์ที่เข้าถึงได้อย่างรวดเร็วเพื่อความสะดวกของคุณเอง

    ln -s ~/teams/td/tech/app/release/apks ~/apks

    จากนั้นแทนที่จะพิมพ์เส้นทางที่ยาวไปcdเพียงแค่ใช้cd ~/apksและcd ../teams(หรือในตัวอย่างที่ต้องการ~/teams) เพื่อกลับไป

  • อย่าใช้เชลล์เดี่ยวและ cd ไปมาระหว่างพา ธ แต่ให้เชลล์หนึ่งเชลล์รันสำหรับแต่ละพา ธ ที่คุณต้องการใช้งานมีหลายระดับที่จะทำให้การทำงานหลายอย่างสำเร็จ:

    • ใช้หน้าต่างเทอร์มินัลหลายเครื่อง ทำงานได้ดีที่สุดถ้า windows อยู่บนพื้นที่ทำงานที่แตกต่างกันพื้นที่ทำงาน
    • ใช้หลายแท็บในหน้าต่างเดียว นี่เหมาะอย่างยิ่งกับการทำคำสั่งบางอย่างในไดเรกทอรีบางรายการ: เพื่อกลับไปเพียงปิดแท็บเทอร์มินัล!
    • (ไม่ได้จริงๆที่เหมาะสม IMO แต่เพื่อความสมบูรณ์ :) ใช้ Multiplexer tmuxขั้วเช่น
    • เพียงแค่เปิดใช้งานการกระทำในคำสั่งที่มีวัตถุประสงค์เดียวที่cdลงไปในโฟลเดอร์ทำสิ่งหนึ่งที่นั่นและให้การควบคุมกลับไปที่โฟลเดอร์เดิมทันที: แทน

      $ cd /home/thina/teams/td/tech/app/release/apks
      $ some_command this_file_here
      $ cd ../../../../..

      เพียงแค่ทำหนึ่งซับ

      $ (cd ~/teams/td/tech/app/release/apks; some_command this_file_here)

      หรือเทียบเท่า

      $ sh -c 'cd ~/teams/td/tech/app/release/apks
      > some_command this_file_here'
  • ไม่cd ได้ทั้งหมดแต่เพียงรันคำสั่งที่ถูกต้องจากไดเรกทอรีบ้านของคุณ การขยายรั้งสามารถช่วยได้มากที่นี่: แทนที่จะเป็น

    $ cd /home/thina/teams/td/tech/app/release/apks
    $ some_command this_file_here other_file_also_apks
    $ cd ../../../../..

    คุณทำได้

    $ some_command ~/teams/td/tech/app/release/apks/{this_file_here,other_file_also_apks}

pushdมีประโยชน์มากมาก คุณอาจต้องการเพิ่มข้อมูลเพิ่มเติมเกี่ยวกับวิธีใช้เพื่อทำให้คำตอบของคุณดีขึ้น
Sergiy Kolodyazhnyy

@Serg: ใช่ แต่ตัวฉันเองรู้เพียงผลักจากคำตอบของ Jos ข้างต้นเท่านั้น
leftaroundabout

อ่าฉันเห็นแล้ว อาจเป็นประโยชน์สำหรับคำตอบในอนาคต
Sergiy Kolodyazhnyy

1

Pushd และ Popd

คำสั่งpushdและpopdเป็นรายการโปรดของฉัน pushdคำสั่งจะจำไดเรกทอรีที่คุณได้เข้าชมได้หรือไม่กับคำสั่งdirsและเมื่อคุณพร้อมที่จะกระโดดไปข้างหลังใช้popdการกลับมา

นี่คือตัวอย่างการใช้ฟังก์ชั่นทุบตีและชื่อแทน:

sd ()
{
    pushd "$1" > /dev/null
}

po ()
{
    popd
}

alias d='dirs'

ฉันใช้คำสั่งเหล่านี้ผสมผสานกันอย่างต่อเนื่องในหลากหลายวิธี

นามแฝง

อีกตัวเลือกสำหรับไดเรกทอรีที่เข้าถึงบ่อยคือเพียงแค่นามแฝงcdหรือpushdคำสั่ง ดังนั้นใช้ตัวอย่างจากโพสต์ของคุณ:

alias cdapks='cd /home/thina/teams/td/tech/app/release/apks'
alias cdteams='cd /home/thina/teams'

การรวมกัน

รวมความคิดสองอย่างเข้าด้วยกันและคุณสามารถมีสิ่งนี้ได้:

alias sdapks='sd /home/thina/teams/td/tech/app/release/apks'
alias sdteams='sd /home/thina/teams'

ซึ่งทำให้คุณมีความยืดหยุ่นในการสำรวจไดเรกทอรี ฉันเก็บcd***และsd***นามแฝงในมือสำหรับสิ่งที่ต้องการDesktop, Documents, Music, Downloadsฯลฯ และก็มีประโยชน์มาก!


1

ลองz.lua - คำสั่ง cd ใหม่ที่ช่วยให้คุณนำทางได้เร็วขึ้นโดยการเรียนรู้นิสัยของคุณ

  • ซีดีไปยังไดเรกทอรีประกอบด้วย foo:

    z foo
  • cd ไปที่ไดเรกทอรีลงท้ายด้วย foo:

    z foo$
  • ใช้หลายข้อโต้แย้ง:

    สมมติว่าฐานข้อมูลต่อไปนี้:

    10   /home/user/work/inbox
    30   /home/user/mail/inbox

    "z in"จะ cd /home/user/mail/inboxเป็นรายการถ่วงน้ำหนักที่สูงขึ้น อย่างไรก็ตามคุณสามารถส่งหลายอาร์กิวเมนต์ไปที่ z.lua เพื่อเลือกรายการอื่นได้ ในตัวอย่างข้างต้นแล้วจะเปลี่ยนไดเรกทอรีไป"z w in"/home/user/work/inbox

  • ซีดีพร้อมตัวเลือกแบบโต้ตอบ:

    เมื่อพบการแข่งขันหลายรายการการใช้z -iจะแสดงรายการ:

    $ z -i soft
    3:  0.25        /home/data/software
    2:  3.75        /home/skywind/tmp/comma/software
    1:  21          /home/skywind/software
    > {CURSOR}

    จากนั้นคุณสามารถป้อนหมายเลขและเลือกว่าจะไปที่ไหนก่อนซีดีจริง เช่น. การป้อนข้อมูล 3 /home/data/softwareแผ่นซีดี และถ้าคุณเพียงแค่กด ENTER และป้อนอะไรมันก็จะออกและอยู่ในที่ที่คุณอยู่

    z.luaยังรองรับfzfการเลือกแบบโต้ตอบหรือการทำให้อาร์กิวเมนต์สมบูรณ์:

    เสร็จสิ้นด้วย fzf

  • กลับไปที่ผู้ปกครองอย่างรวดเร็วโดยไม่ต้องพิมพ์cd ../../..:

    ตัวเลือกใหม่"-b"สามารถกลับไปที่ไดเรกทอรีหลักที่ระบุใน bash ได้อย่างรวดเร็วแทนที่จะพิมพ์ "cd ../../ .. " ซ้ำซ้อน:

    • (ไม่มีอาร์กิวเมนต์) : cdลงในรูทโปรเจ็กต์รูทโปรเจ็กต์พาเรนต์ไดเร็กทอรีที่ใกล้ที่สุดที่มี.git/ .hg/ .svnอยู่ในนั้น

    • (อาร์กิวเมนต์หนึ่งตัว) : cdลงในพาเรนต์ที่ใกล้ที่สุดที่เริ่มต้นด้วยคีย์เวิร์ดหากไม่พบให้ไปที่พาเรนต์ที่มีคีย์เวิร์ด

    • (สองข้อโต้แย้ง) : แทนที่ค่าแรกด้วยอันที่สอง (ในเส้นทางปัจจุบัน)

    ...

    เริ่มจากนามแฝงz -bถึงzb:

    # go all the way up to the project root (in this case, the one that has .git in it)
    ~/github/lorem/src/public$ zb
      => cd ~/github/lorem
    
    # cd into to the first parent directory named g*
    ~/github/vimium/src/public$ zb g
      => cd ~/github
    
    # substitute jekyll with ghost
    ~/github/jekyll/test$ zb jekyll ghost
      => cd ~/github/ghost/test

หวังว่ามันจะพอดีกับความต้องการของคุณ


0

ปลามีสิ่งอำนวยความสะดวกที่ดีหลายอย่างสำหรับการเคลื่อนไหวอย่างรวดเร็ว

  • หากคุณพิมพ์ cd-arrow arrow ลูกศรจะเป็นการทำซ้ำ cd ล่าสุด
  • ด้วยการใช้ cd-up-arrow-arrow-arrow มันเป็นการทำซ้ำ cd ล่าสุดครั้งที่สอง
  • เป็นต้น
  • มันมี prevd และ nextd ซึ่งมักจะใช้งานง่ายกว่า pushd และ popd

นอกจากนี้ฉันเก็บไดเรกทอรีโปรดไว้ที่ ~ / f ดังนั้นฉันจึงสามารถ cd ~ / f / x เพื่อไปที่ ~ / foo / bar / baz / experiment-data


0

ฉันใช้นามแฝงมานานแล้วสำหรับไดเรกทอรีที่เข้าถึงบ่อย

ฉันยังมีฟังก์ชั่นทุบตีที่เรียกว่า ccb (ย่อมาจากสร้างไฟล์ cd bat - นี่คือต้นกำเนิดใน dos / windows ที่เชลล์สคริปต์. bat ccb.bat จะสร้างอีกไฟล์. bat สำหรับการกระโดดไปยังไดเรกทอรีปัจจุบัน) ที่สร้าง / ผนวกนามแฝง (ในไฟล์. bash_aliases) ไปยังไดเรกทอรีปัจจุบัน

เช่น: $ ccb myfav จะสร้างนามแฝงไปยังไดเรกทอรีปัจจุบันด้วยนามแฝง myfav ในไฟล์. bash_aliases และจัดหาไฟล์. bashrc เพื่อให้นามแฝงพร้อมใช้งานทันที

ฉันเพิ่งพบโซลูชันใหม่ มันเป็นฟังก์ชั่นทุบตี

## USAGE : lj <your_dir>
### lj -- short for LongJump -- (kinda similar to a C function which would jump to an address outside of your current function)
function lj() {
        pushd `find . -type d -name $1 -print | head -n 1`
}

$ lj deeply_nested_dir_name

สิ่งนี้ไม่จำเป็นต้องเรียนรู้อะไรจากการใช้งานครั้งก่อน ปัญหาที่อาจไม่สามารถแก้ไขได้คือ: หากมีมากกว่า 1 ไดเรกทอรีชื่อ "deep_nested_dir_name" ในแผนผังไดเรกทอรีย่อยมันจะข้ามไปยังอันดับที่ 1 ของไดเรกทอรีที่พบโดยการค้นหา

นอกจากนี้วิธีนี้จะไม่สามารถข้ามโครงสร้างไดเรกทอรีอื่นได้

ระหว่างนามแฝง hardcoded และ aliases ที่สร้างขึ้นและฟังก์ชัน lj () ใหม่นี้ความต้องการส่วนใหญ่ของฉันได้รับการดูแล

นี่คือฟังก์ชั่นทุบตี CCB () ของฉันสำหรับทุกคนที่ต้องการใช้มัน

function ccb() {
        foo=$PWD
        echo "" >> ~/.bash_aliases
        echo "alias $1='pushd $foo > /dev/null'" >> ~/.bash_aliases
        source ~/.bashrc
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.