Navigasi direktori cepat di bash shell

119

Saya ingin sering beralih di antara direktori yang berada di jalur yang sama sekali tidak terkait, misalnya /Project/Warnest/docs/dan ~/Dropbox/Projects/ds/test/.

Tetapi saya tidak ingin mengetik cd /[full-path]/sepanjang waktu. Apakah ada perintah pintas untuk beralih ke direktori yang sebelumnya berfungsi?

Salah satu solusi yang dapat saya pikirkan adalah menambahkan variabel lingkungan ke bash .profiledirektori direktori yang sering saya gunakan dan cdmenggunakan variabel-variabel tersebut.

Tetapi apakah ada solusi lain untuk ini?

saiy2k
sumber
Tautan simbolik juga bisa bermanfaat untuk ini. en.wikipedia.org/wiki/…
user606723

Jawaban:

135

Jika Anda hanya beralih di antara dua direktori, Anda dapat menggunakannya cd -untuk bolak-balik.

Chris Card
sumber
13
Bagaimana hal ini telah menghindari saya begitu lama adalah sebuah misteri. Terima kasih banyak atas tip yang luar biasa ini.
Tn. Shickadance
3
+1 Tentu saja salah satu favorit saya dan yang entah bagaimana banyak pakar telah 'ketinggalan'.
Michael Durrant
62

Ada variabel shell CDPATHdi bashdan kshdan cdpathdi 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.

Jadi Anda dapat mengatur di ~ / .bashrc Anda:

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

Kemudian cd docsdan cd testakan membawa Anda ke direktori tersebut pertama kali ditemukan. (Maksud saya, bahkan jika direktori dengan nama yang sama akan ada di direktori saat ini, CDPATHmasih akan dikonsultasikan. Jika CDPATHakan berisi lebih banyak direktori yang memiliki subdirektori dengan nama yang diberikan, yang pertama akan digunakan.)

manatwork
sumber
16
Harus disebutkan bahwa secara umum, Anda ingin entri pertama $CDPATHmenjadi .(entri eksplisit, yaitu :juga berfungsi). Kalau tidak, Anda akan berakhir dengan perilaku aneh di mana CDPATHdir mengambil alih direktori di direktori kerja saat ini, yang mungkin tidak Anda inginkan.
jw013
4
Saya melakukan hal yang hampir sama, tetapi tanpa export. Dengan begitu, CDPATHtidak diekspor ke skrip dengan efek yang berpotensi aneh atau berbahaya. Lihat di sini untuk diskusi dan contoh lebih lanjut.
Telemachus
"bash dan ksh dan cdpath di zsh" ... dan di tcsh (hanya menjawab pertanyaan berdasarkan itu di atas Pengguna Super dan menemukan ini sambil mencari jawaban yang sama di SE).
Hennes
Ini ditentukan POSIX, saya pikir. Setidaknya, POSIX untuk cdmerujuk padanya.
mikeserv
48

Hal lain yang mungkin Anda coba adalah alat yang disebut autojump . Itu membuat database panggilan ke alias itu ( jsecara default) dan upaya untuk membuat keputusan cerdas tentang ke mana Anda ingin pergi. Misalnya jika Anda sering mengetik:

j ~/Pictures

Anda dapat menggunakan yang berikut ini untuk mencapainya:

j Pic

Ini tersedia untuk Debian dan Ubuntu, dan disertakan pada basis per pengguna di ~/.bashrcatau ~/.zshrcsecara default.

Kyle Smith
sumber
5
Autojump mungkin adalah alat terbaik untuk ini, perlu sedikit waktu untuk membangun basis data dir umum, tetapi setelah itu saya pikir Anda akan menemukan bahwa Anda tidak dapat hidup tanpanya. Saya tahu setiap kali saya menggunakan komputer orang lain, saya merasa lumpuh.
quodlibetor
1
terima kasih suka alat ini! Dan meskipun cd -berguna untuk mengetahui jika Anda belum mengetahuinya, saya pikir ini adalah solusi yang jauh lebih baik daripada jawaban teratas saat ini.
Pengguna
Terpasang di seluruh sistem pada sistem apa?
ctrl-alt-delor
1
@richard Tersedia sebagai paket (misalnya apt-get install autojumpdi Ubuntu, tetapi juga untuk banyak lainnya seperti yang didokumentasikan pada halaman mereka) untuk instalasi seluruh sistem, tetapi setiap pengguna perlu memuatnya ke dalam lingkungan shell mereka sehingga dapat menimpa cd untuk melacak ke mana Anda akan pergi
nealmcb
Penting untuk dikatakan source /usr/share/autojump/autojump.shharus ditambahkan ke ~ / .bashrc agar autojump berfungsi .
Pablo A
39

Jika sejumlah kecil direktori, Anda dapat menggunakannya pushduntuk merotasi di antaranya:

# 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

tidak seperti cd -, Anda dapat menggunakan ini dengan lebih dari dua direktori


Menindaklanjuti saran Noach, saya sekarang menggunakan ini:

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
}

contoh penggunaan:

# 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

dll. Jelas ini hanya untuk memutar melalui tumpukan dan tidak menangani menambahkan jalur baru - mungkin saya harus mengganti nama itu.

Tak berguna
sumber
6
Ooh, saya tahu tentang pushddan popduntuk traversal, tetapi bukankah pushd bisa memutar apa yang telah digunakan sejauh ini ...
Izkata
14

Saya menggunakan aliasdi bashrc untuk melakukan cd itu.
seperti:

alias wdoc='cd ~/Project/Warnest/docs'
alias dstest='cd ~/Dropbox/Projects/ds/test'
Felix Yan
sumber
apakah bashrc file seperti .profile? di mana saya perlu menambahkan garis-garis itu?
saiy2k
~/.bashrcatau /etc/bash.bashrc. Saya tidak menggunakan .profilesebelumnya, jadi tidak tahu hubungan di antara mereka :-(
Felix Yan
skrip bashrc akan mulai setiap kali Anda membuka terminal. profil dengan startup.
menambahkan baris itu ke saya .bash_profiledan berfungsi dengan baik .. thx :)
saiy2k
Saya memiliki beberapa folder proyek spesifik yang saya kunjungi secara teratur, ini adalah cara termudah untuk mengatur dan memeliharanya. Juga, bagi saya, ini menghasilkan jumlah karakter paling sedikit yang diketik dari semua solusi di sini. CIUMAN! :-)
moodboom
11

Saya menemukan skrip (biasanya disebut acd_funch.sh) yang memecahkan masalah ini untuk saya. Dengan ini, Anda dapat mengetik cd --untuk melihat 10 direktori terakhir yang telah Anda gunakan. Ini akan terlihat seperti ini:

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

Untuk pergi ~/Music/thirddirketikkan sajacd -2

Referensi

CATATAN: Skrip ini awalnya diterbitkan dalam artikel linux gazette yang tersedia di sini: acd_func.sh - memperpanjang CD bash untuk menyimpan, menampilkan, dan mengakses riwayat nama direktori yang dikunjungi .

Dekan
sumber
Skrip yang sama juga diterbitkan dalam Linux Gazette, Edisi # 109, Desember 2004 .
Serge Stroobandt
@Dean Tautan tersebut menuju ke video musik dan mengatakan bahwa Geocities telah ditutup.
somethingSomething
1
@somethingSomething Menambahkan tautan alternatif.
Dean
sejarah | grep cd
user2180794
10

Coba cdable_varsopsi shell di bash. Anda aktifkan dengan shopt -s cdable_vars.

Maka Anda perlu mengatur variabel Anda export dir1=/some/path. dan akhirnya cd dir1, dll. Anda kemudian dapat memasukkannya ke dalam ~/.bashrcuntuk membuatnya menempel.

Wojtek Rzepala
sumber
10

Gunakan "pushd -n " (dengan asumsi Anda menggunakan bash).

Tambahkan ke ~ / .bashrc Anda:

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

kemudian,

cd ~ adalah rumahmu,

cd ~1 aku s ~/Dropbox/Projects/ds/test/

cd ~2 aku s /Project/Warnest/docs/

Anda dapat menggunakan ~1, ~2dll dengan cara yang sama persis seperti ~.

Eelvex
sumber
7

Ada banyak saran bagus di sini. Yang akan digunakan tergantung pada apakah Anda memiliki daftar direktori tetap yang Anda ganti, atau apakah Anda mencari solusi yang lebih umum.

Jika itu daftar kecil yang tetap, mengatur alias sederhana (seperti yang disarankan Felix Yan) akan lebih mudah digunakan.

Jika Anda mencari solusi yang lebih umum (yaitu banyak direktori berbeda, berubah seiring waktu), saya akan menggunakan pushd dan popd (seperti yang disarankan Useless). Saya pribadi mendapati pushd / popd default sulit digunakan, terutama ketika Anda mulai beralih di antara banyak folder; namun saya menulis beberapa penyesuaian yang membuatnya lebih mudah bagi saya. Tambahkan yang berikut ke bashrc Anda:

alias dirs='dirs -v'
pd () 
{ 
    if [ "$1" ]; then
        pushd "${1/#[0-9]*/+$1}";
    else
        pushd;
    fi > /dev/null
}
  • Gunakan pd(sebagai bentuk pendek pushd) untuk melompat ke folder baru, mengingat di mana Anda berada.
  • Gunakan dirsuntuk melihat daftar direktori yang disimpan.
  • Gunakan pd 3untuk melompat ke direktori nomor 3.

Contoh penggunaan:

$ 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$ 
Noach
sumber
6

Berikut ini tampaknya berfungsi pada satu kasus saya mengujinya, dan Anda bisa saja menjatuhkan nama direktori Anda sebagai symlinks di ~ / Bookmark:

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

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

ccd testdir && echo $PWD
# gives /tmp
Ulrich Schwarz
sumber
fungsi ccd () perlu diketik di terminal prompt atau di tempat lain? bisakah kamu menjelaskan?
saiy2k
1
@ saiy2k: maaf, ya. The functiongaris masuk ke .bashrc (Anda dapat mengetik di terminal Anda untuk menguji, tapi akan pergi ketika Anda menutup jendela itu), garis sebelum mengatur kasus uji dari "testdir" menjadi nama untuk /tmp, dan baris terakhir adalah tes untuk melihat apakah itu berfungsi.
Ulrich Schwarz
6

Anda bisa melakukan lebih buruk daripada mencoba j2 .

Dari README:

Menghabiskan banyak waktu melakukan cd di sekitar pohon direktori yang kompleks?

Saya melacak di mana Anda pernah dan berapa banyak waktu yang Anda habiskan di sana, dan menyediakan cara yang nyaman untuk melompat ke direktori yang benar-benar Anda gunakan.

Saya menggunakannya secara luas & merekomendasikannya.

phildobbin
sumber
5

Saya menyarankan menggunakan zsh , shell itu sebagai penyelesaian TAB yang sangat baik untuk direktori, file, dan bahkan opsi untuk sebagian besar program klien.

Saya telah menggunakan shell itu selama bertahun-tahun sekarang, dan saya akan kehilangan fungsionalitasnya jika sudah tidak ada. Menulis skrip zsh juga sangat menyenangkan, dengan sejumlah besar kalimat yang dapat membantu Anda setiap hari.

polemon
sumber
Tidak perlu mengubah ke zsh untuk penyelesaian TAB karena bash memiliki semuanya sama. Untuk fungsi lain mungkin tetapi tidak untuk ini.
Peer Stritzinger
1
@PeerStritzinger Bash memperkenalkan fungsionalitas semacam itu di BASH 4.0, tetapi dibandingkan dengan zsh, masih jauh di belakang. Mengatakan "sama saja" tentu saja tidak benar.
polemon
Nah zsh adalah benar-benar übershell tetapi hanya untuk penyelesaian tab tidak perlu berubah (pertanyaan diminta untuk bash). Selain itu bash 4.0 diperkenalkan sekitar 3 tahun yang lalu ...
Peer Stritzinger
5

Dalam pengalaman saya, percepatan terbesar dalam menavigasi di shell adalah dengan menggunakan fungsi pencarian riwayatnya. Di Bash Anda dapat mencari mundur dalam sejarah perintah Anda dengan menekan Ctrl+ Rdan mengetik beberapa pola. Pola itu kemudian dicocokkan dengan entri sebelumnya dalam riwayat Anda - mungkin itu cdperintah atau operasi lainnya - dan saran dibuat saat Anda mengetik. Cukup tekan enter untuk menjalankan perintah yang disarankan lagi. Ini disebut reverse-search-historydalam Bash dan aku menyukainya. Ini menghemat banyak penekanan tombol dan menghemat memori internal saya.

Ini adalah hal yang baik karena Anda hanya perlu mengingat bagian perintah yang lebih kecil, seperti Dropatau Wauntuk membedakan antara dua entri riwayat cd ~/Dropbox/Projects/ds/test/dan cd /Project/Warnest/docs/.


sumber
5

Saya juga menggunakan alias ini (tambahkan ke ~ / .bashrc):

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

Jauh lebih cepat untuk pergi ke direktori atas dengan mereka (namun hanya menyelesaikan setengah dari navigasi).

reimai
sumber
1
Ini adalah alias yang membantu, tapi saya tidak sepenuhnya yakin bahwa mereka akan cocok dengan kebutuhan OP. Anda mungkin mempertimbangkan untuk memperluas jawaban Anda untuk menyarankan bagaimana ini bisa langsung membantu untuk masalah OP.
HalosGhost
4

jika Anda menggunakan zsh:

  • Anda tidak perlu mengetik cd, cukup ketik jalur direktori ( /foo/bar/baz<Enter>sama dengan cd /foo/bar/baz<Enter>)

    membutuhkan auto_cdopsi untuk diatur

  • Anda dapat memperluas jalur yang disingkat dengan Tabkunci ( /u/sh/pi<Tab>memperluas ke /usr/share/pixmaps; berfungsi untuk nama file juga)
Andrei Dziahel
sumber
3
Bash 4 telah diperoleh shopt -s autocd, jadi ini bukan lagi hanya kebaikan zsh.
Gilles
4

Ada alat yang agak bagus untuk perubahan direktori cepat:

xd - eXtra fast Directory changer http://xd-home.sourceforge.net/xdman.html

agak canggung adalah bahwa Anda perlu memetakannya di profil bash atau serupa karena hanya menghasilkan direktori

# 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 $*`
}

Anda dapat melakukan hal-hal seperti:

# 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
batal
sumber
Ubah fungsinya untuk f() { cd "$(xd -g "$@")"; }menangani direktori dan spasi yang diberi spasi dengan tepat di argumen xd(Anda mungkin tidak membutuhkan path). Jika Anda tidak pernah menggunakan xdcara lain, Anda dapat melakukannya secara alternatif xd() { cd "$(command xd -g "$@")"; }(atau gunakan /usr/bin/xddi tempat command xd- Anda selalu dapat menjalankannya command xd …jika Anda perlu mem-bypassnya).
Adam Katz
4

Anda tidak akan pernah harus mengetikkan path lengkap di shell. Anda selalu bisa menggunakan:

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

dari pada

soffice /Project/Warnest/docs/mydoc.odt
gena2x
sumber
1
Ini seperti menyelesaikan tab, tetapi lebih buruk dalam segala hal
Michael Mrozek
Anda tidak dapat melakukan ini dengan tab yang dilengkapi dengan jumlah penekanan tombol euqal kecuali Project hanya file yang dimulai dengan P, dll. Anda juga harus menunggu penyelesaian setiap kali, menggunakan * Anda tidak perlu menunggu.
gena2x
Saya pikir Anda memilikinya mundur - Anda tidak dapat melakukan P*kecuali Proyek adalah satu-satunya file yang dimulai dengan P. Tab penyelesaian dapat siklus (secara default di sebagian besar shell; Anda perlu mengubah tab ke menu-completedalam bash), dan menyelesaikan secara instan dalam kasus sederhana seperti ini, tidak perlu menunggu untuk itu
Michael Mrozek
Mengenai 'Anda tidak bisa melakukannya' - Anda bisa, coba saja, Anda kehilangan seluruh poin jika Anda pikir Anda tidak bisa. Coba gema / u * / b * / g ++
gena2x
1
Saya mengerti maksud Anda, ini lebih cepat selama Anda yakin telah mengetik jalur yang tidak ambigu, tetapi sesuatu seperti /P*/W*/*/mydoc*kedengarannya akan berfungsi dengan baik sampai suatu hari Anda membuat file lain yang cocok dengan bola itu, dan tiba-tiba Anda mengakhiri membuka keduanya sekaligus. /u*/*/g++memang sedikit karakter, tapi mudah-mudahan tidak ada yang lain di subfolder dari folder root saya yang dimulai dengan unamanya g++. (Sebagai kompromi yang bagus, dalam beberapa shell Anda dapat menggunakan tab untuk memperluas gumpalan di tempat saat Anda pergi)
Michael Mrozek
3

Ada juga OLDPWD, variabel lingkungan yang, menurut IEEE 1003.1 (POSIX), harus diperbarui dengan direktori kerja sebelumnya setiap kali cdmengubah direktori kerja (untuk yang penasaran, baris 80244 halaman 2506 dari IEEE 1003.1-2008).

njsg
sumber
3

Ada juga aplikasi "wcd" yang dibuat khusus untuk ini (juga porting ke cygwin, karena saya mengerti). Anda dapat membuat pintasan, penanda direktori dengan itu. Juga mendukung kartu liar. Membaca halaman manual & dokumen di / usr / share / wcd akan banyak membantu.

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

sam
sumber
3

cdargs adalah alat paling efisien untuk mem-bookmark direktori: http://www.youtube.com/watch?v=uWB2FIQlzZg

Emon
sumber
Apakah ini produk yang dikaitkan dengan Anda?
Kazark
Terima kasih telah mengarahkan saya ke cdargs. Cukup sudo apt-get cdargsdi ubuntu. BTW video youtube benar-benar buruk tetapi alatnya hebat.
DavidG
3

Coba fastcd ( https://github.com/frazenshtein/fastcd ) Ini mengatur hook yang merekam direktori yang dikunjungi dari bash. Dan set script sebagai "j" alias, yang menunjukkan kepada Anda direktori yang terakhir dikunjungi, dengan kemampuan untuk dengan cepat cd (mulai mengetik untuk memfilter direktori). Modifikasi .bashrc diperlukan untuk membuat alias "j".

Mendapatkan alat

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

Instal modul yang diperlukan

pip install --user urwid

Sumber file set.sh ke bashrc Anda

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

Dan perbarui bashrc

source ~/.bashrc

Kemudian cukup ketik "j" di konsol

Sam Toliman
sumber
Bagaimana cara kerjanya? Jika itu alias, apa alat ini lakukan untuk Anda yang tidak dapat Anda lakukan dengan mengedit secara manual .bashrc?
G-Man
Ini meluncurkan daemon yang mencatat direktori yang dikunjungi di ~ / .fastcd untuk shell yang diluncurkan (bash). "j" meluncurkan alat yang menampilkan direktori yang terakhir dikunjungi, dengan kemampuan untuk melakukan cd dengan cepat. Modifikasi .bashrc diperlukan untuk membuat alias "j". Anda dapat melihat kode sumber untuk informasi lebih lanjut, saya kira
Sam Toliman
Terima kasih atas tanggapan cepat Anda. Ini adalah jenis informasi yang harus dijawab. Harap edit jawaban Anda untuk memasukkan informasi ini.
G-Man
3

Saya memiliki pertanyaan yang sama, dan pertama kali menemukan jawaban ini . Saya menginstal utilitas z ( https://github.com/rupa/z ).

Ini persis apa yang Anda cari, karena z belajar dari perintah cd Anda, dan melacak direktori sesuai dengan prinsip frecency (sering & baru-baru ini). Jadi setelah Anda melakukan kedua perintah cd sekali, Anda dapat melakukan sesuatu seperti:

z docs
z ds

untuk melompat ke /Project/Warnest/docs/dan ~/Dropbox/Projects/ds/test/masing - masing. Argumen untuk z adalah regex, jadi Anda bahkan tidak perlu mengetikkan nama folder lengkap.

saroele
sumber
2

Saya telah menggunakan cd utility saya sendiri untuk mengelola ini selama bertahun-tahun. Itu alias perintah cd Anda dan secara otomatis menyimpan tumpukan direktori.

tanda kutip
sumber
2

Anda bisa menggunakan exportuntuk menetapkan jalur direktori Anda ke variabel dan kemudian referensi mereka.

export dir1=/Project/Warnest/docs/
export dir2= ~/Dropbox/Projects/ds/test/
cd $dir1
cd $dir2
Fahad Naeem
sumber
Ya, ini cukup untuk beberapa dir favorit. Tidak perlu menginstal utilitas lain apa pun. Masukkan saja exportpernyataan di Anda ~/.bashrc, dan mereka akan selalu tersedia.
wisbucky
1

Beberapa saran di sini:

Ide paling langsung, saya akan menambahkan alias dalam file profil

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

Kemudian gunakan $ dir1 atau dir2, bisa cd

Jika Anda selalu beralih dalam dua dir saja. menggunakan cd -akan beralih di antara mereka.

Dan
sumber
1

Solusi yang saya gunakan untuk situasi ini adalah screen. Mulai layar dan buat jendela untuk setiap direktori dengan C-a cdan navigasi di sana. Ubah antara windows / direktori dengan C-a natau C-a p. Beri nama windows dengan C-a A. Kemudian Anda dapat memunculkan daftar windows Anda C-a "dan menavigasi menggunakan nomor jendela atau nama. Karena itu screen, Anda dapat melepaskan dari sesi menghemat ruang kerja Anda dan melampirkan kembali nanti dengan pengaturan yang sama.

David R. McWilliams
sumber
1

Tampaknya apa yang Anda butuhkan pada dasarnya adalah file proyek untuk alur kerja Anda. Dengan direktori yang termasuk dalam aktivitas Anda, seperti dalam IDE pemrograman. Coba Zsh Navigation Tools dan alat di n-cdsana. Ini akan memungkinkan Anda untuk menavigasi di folder yang terakhir dikunjungi dan juga menentukan Hotlistdirektori with dengan pilihan Anda:

n-cd

n-cd dapat diikat ke kombinasi kunci dengan:

zle -N znt-cd-widget

bindkey "^ T" znt-cd-widget

Adam Lisson
sumber
1

TL; DR

  1. Gunakan Fishuntuk shell interaktif yang memberdayakan Anda segera ( fish> zsh> bash).
  2. Gunakan POSIX/ Bashuntuk scripting yang sintaks paling banyak didukung ( POSIX> Bash> Zsh> Fish).

Kerang

Telah menguji berbagai kerang di sini adalah umpan balik saya (dalam rangka pengujian / adopsi):

  • Bash:
    • penyelesaian otomatis: dasar;
    • perluasan jalur: tidak;
    • scripting: luar biasa.
  • Zsh+ oh-my-zsh:
    • penyelesaian otomatis: baik (bersepeda terus);
    • perluasan jalur: ya ( cd /e/x1cd /etc/X11/);
    • scripting: bagus.
  • Fish+ oh-my-fish(saat ini) adalah yang terbaik di luar kotak:
    • penyelesaian otomatis: opsi asli dan yang didukung;
    • perluasan jalur: ya;
    • scripting: terlalu banyak perbedaan dari POSIX-compatible.

Gunakan alias bermakna

Setiap shell dapat diperluas menggunakan functiondan alias, berikut adalah yang saya gunakan terkait dengan masalah Anda (kompatibel POSIX):

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

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

Ada yang dasar, tetapi sangat bermakna sehingga mudah diingat dan dilengkapi secara otomatis.

Kenali cangkang Anda

Konfigurasikan CDPATHuntuk menambahkan direktori yang paling sering Anda gunakan (mis. ~/projects/, /etc/init.d/) Sehingga Anda dapat dengan cepat beralih ke direktori tersebut .

Lihat jawaban manatwork untuk detail mroe padaCDPATH .

Hangout dan baca

Édouard Lopez
sumber
Saat fungsi shell memanggil exit, Anda keluar dari shell interaktif. Itu "alias bermakna" bisa saja alias back='cd -'dan alias up='cd ..'- tapi jangan khawatir, perintah itu tidak akan pernah kembali palsu (tidak ada direktori sebelumnya? Itu mengirim Anda pulang! Sudah di root? Itu adalah no-op!) Dan karena itu Anda tidak akan pernah keluar . Pertimbangkan juga alias back='cd $OLDPWD'(perhatikan tanda kutip tunggal) karena tidak akan menghasilkan output apa pun ( cd -memberi tahu Anda di mana ia mengirim Anda, yang kemungkinan besar tidak perlu karena prompt Anda memiliki info itu)
Adam Katz
1

ancadalah alat garis cmd (kependekan dari anchor), yang menyimpan bookmark direktori. (sejauh ini hanya diuji dengan bash)

Dalam kasus Anda:

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

ini menambahkan kedua direktori ke daftar anchor (think bookmarks)

sekarang jika Anda ingin melompat /Project/Warnest/docs/dari mana saja pada tipe sistem Anda:

anc Warn

dan jika Anda ingin melompat untuk ~/Dropbox/Projects/ds/test/mengetik:

anc ds test

Selain mencocokkan teks dengan jalur yang ditandai, namun memiliki banyak cara mudah lainnya untuk melompat-lompat di direktori.

anc i

memulai mode interaktif, yang mencantumkan semua bookmark dengan nomor, sehingga yang harus Anda ketik adalah nomornya

Jika Anda mengetik:

anc Pro[TAB]

daftar yang cocok dengan semua bookmark (dalam kasus Anda, kedua bookmark) ditampilkan dan Anda dapat memilihnya menggunakan tombol panah, ini adalah cara yang sangat cepat dan intuitif.

Dapatkan anc di halaman github proyek: https://github.com/tobimensch/anc

Ada juga README dengan contoh penggunaan.

Pengungkapan penuh: Saya penulis skrip ini. Saya berharap beberapa orang akan merasakan manfaatnya.

tobimensch
sumber