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
.profile
direktori direktori yang sering saya gunakan dan cd
menggunakan variabel-variabel tersebut.
Tetapi apakah ada solusi lain untuk ini?
bash
shell
command-line
alias
cd-command
saiy2k
sumber
sumber
Jawaban:
Jika Anda hanya beralih di antara dua direktori, Anda dapat menggunakannya
cd -
untuk bolak-balik.sumber
Ada variabel shell
CDPATH
dibash
danksh
dancdpath
dizsh
:Jadi Anda dapat mengatur di ~ / .bashrc Anda:
Kemudian
cd docs
dancd test
akan membawa Anda ke direktori tersebut pertama kali ditemukan. (Maksud saya, bahkan jika direktori dengan nama yang sama akan ada di direktori saat ini,CDPATH
masih akan dikonsultasikan. JikaCDPATH
akan berisi lebih banyak direktori yang memiliki subdirektori dengan nama yang diberikan, yang pertama akan digunakan.)sumber
$CDPATH
menjadi.
(entri eksplisit, yaitu:
juga berfungsi). Kalau tidak, Anda akan berakhir dengan perilaku aneh di manaCDPATH
dir mengambil alih direktori di direktori kerja saat ini, yang mungkin tidak Anda inginkan.export
. Dengan begitu,CDPATH
tidak diekspor ke skrip dengan efek yang berpotensi aneh atau berbahaya. Lihat di sini untuk diskusi dan contoh lebih lanjut.cd
merujuk padanya.Hal lain yang mungkin Anda coba adalah alat yang disebut autojump . Itu membuat database panggilan ke alias itu (
j
secara default) dan upaya untuk membuat keputusan cerdas tentang ke mana Anda ingin pergi. Misalnya jika Anda sering mengetik:Anda dapat menggunakan yang berikut ini untuk mencapainya:
Ini tersedia untuk Debian dan Ubuntu, dan disertakan pada basis per pengguna di
~/.bashrc
atau~/.zshrc
secara default.sumber
cd -
berguna untuk mengetahui jika Anda belum mengetahuinya, saya pikir ini adalah solusi yang jauh lebih baik daripada jawaban teratas saat ini.apt-get install autojump
di 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 pergisource /usr/share/autojump/autojump.sh
harus ditambahkan ke ~ / .bashrc agar autojump berfungsi .Jika sejumlah kecil direktori, Anda dapat menggunakannya
pushd
untuk merotasi di antaranya:tidak seperti
cd -
, Anda dapat menggunakan ini dengan lebih dari dua direktoriMenindaklanjuti saran Noach, saya sekarang menggunakan ini:
contoh penggunaan:
dll. Jelas ini hanya untuk memutar melalui tumpukan dan tidak menangani menambahkan jalur baru - mungkin saya harus mengganti nama itu.
sumber
pushd
danpopd
untuk traversal, tetapi bukankah pushd bisa memutar apa yang telah digunakan sejauh ini ...Saya menggunakan
alias
di bashrc untuk melakukan cd itu.seperti:
sumber
~/.bashrc
atau/etc/bash.bashrc
. Saya tidak menggunakan.profile
sebelumnya, jadi tidak tahu hubungan di antara mereka :-(.bash_profile
dan berfungsi dengan baik .. thx :)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:Untuk pergi
~/Music/thirddir
ketikkan 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 .
sumber
Coba
cdable_vars
opsi shell di bash. Anda aktifkan denganshopt -s cdable_vars
.Maka Anda perlu mengatur variabel Anda
export dir1=/some/path
. dan akhirnyacd dir1
, dll. Anda kemudian dapat memasukkannya ke dalam~/.bashrc
untuk membuatnya menempel.sumber
Gunakan "pushd -n " (dengan asumsi Anda menggunakan bash).
Tambahkan ke ~ / .bashrc Anda:
kemudian,
cd ~
adalah rumahmu,cd ~1
aku s~/Dropbox/Projects/ds/test/
cd ~2
aku s/Project/Warnest/docs/
Anda dapat menggunakan
~1
,~2
dll dengan cara yang sama persis seperti~
.sumber
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:
pd
(sebagai bentuk pendekpushd
) untuk melompat ke folder baru, mengingat di mana Anda berada.dirs
untuk melihat daftar direktori yang disimpan.pd 3
untuk melompat ke direktori nomor 3.Contoh penggunaan:
sumber
Berikut ini tampaknya berfungsi pada satu kasus saya mengujinya, dan Anda bisa saja menjatuhkan nama direktori Anda sebagai symlinks di ~ / Bookmark:
sumber
function
garis 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.Anda bisa melakukan lebih buruk daripada mencoba j2 .
Dari README:
Saya menggunakannya secara luas & merekomendasikannya.
sumber
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.
sumber
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
+R
dan mengetik beberapa pola. Pola itu kemudian dicocokkan dengan entri sebelumnya dalam riwayat Anda - mungkin itucd
perintah atau operasi lainnya - dan saran dibuat saat Anda mengetik. Cukup tekan enter untuk menjalankan perintah yang disarankan lagi. Ini disebutreverse-search-history
dalam 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
Drop
atauWa
untuk membedakan antara dua entri riwayatcd ~/Dropbox/Projects/ds/test/
dancd /Project/Warnest/docs/
.sumber
Saya juga menggunakan alias ini (tambahkan ke ~ / .bashrc):
Jauh lebih cepat untuk pergi ke direktori atas dengan mereka (namun hanya menyelesaikan setengah dari navigasi).
sumber
jika Anda menggunakan zsh:
Anda tidak perlu mengetik
cd
, cukup ketik jalur direktori (/foo/bar/baz<Enter>
sama dengancd /foo/bar/baz<Enter>
)membutuhkan
auto_cd
opsi untuk diaturTab
kunci (/u/sh/pi<Tab>
memperluas ke/usr/share/pixmaps
; berfungsi untuk nama file juga)sumber
shopt -s autocd
, jadi ini bukan lagi hanya kebaikan zsh.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
Anda dapat melakukan hal-hal seperti:
sumber
f() { cd "$(xd -g "$@")"; }
menangani direktori dan spasi yang diberi spasi dengan tepat di argumenxd
(Anda mungkin tidak membutuhkan path). Jika Anda tidak pernah menggunakanxd
cara lain, Anda dapat melakukannya secara alternatifxd() { cd "$(command xd -g "$@")"; }
(atau gunakan/usr/bin/xd
di tempatcommand xd
- Anda selalu dapat menjalankannyacommand xd …
jika Anda perlu mem-bypassnya).Anda tidak akan pernah harus mengetikkan path lengkap di shell. Anda selalu bisa menggunakan:
dari pada
sumber
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 kemenu-complete
dalam bash), dan menyelesaikan secara instan dalam kasus sederhana seperti ini, tidak perlu menunggu untuk itu/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 denganu
namanyag++
. (Sebagai kompromi yang bagus, dalam beberapa shell Anda dapat menggunakan tab untuk memperluas gumpalan di tempat saat Anda pergi)Ada juga
OLDPWD
, variabel lingkungan yang, menurut IEEE 1003.1 (POSIX), harus diperbarui dengan direktori kerja sebelumnya setiap kalicd
mengubah direktori kerja (untuk yang penasaran, baris 80244 halaman 2506 dari IEEE 1003.1-2008).sumber
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
sumber
cdargs adalah alat paling efisien untuk mem-bookmark direktori: http://www.youtube.com/watch?v=uWB2FIQlzZg
sumber
sudo apt-get cdargs
di ubuntu. BTW video youtube benar-benar buruk tetapi alatnya hebat.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
Instal modul yang diperlukan
Sumber file set.sh ke bashrc Anda
Dan perbarui bashrc
Kemudian cukup ketik "j" di konsol
sumber
.bashrc
?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:
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.sumber
Pembaruan (2016): Saya sekarang menggunakan FASD untuk ini, yang memungkinkan pencarian fuzzy berdasarkan direktori terbaru Anda.
Saya telah membuat alat untuk ini, di Ruby. Ini memungkinkan Anda untuk menggunakan file YAML untuk mendeklarasikan proyek Anda.
Saya telah menulis sedikit artikel tentang hal ini di sini: http://jrnv.nl/switching-projects-terminal-quickly/
Saya juga memposting sumbernya di GitHub: https://github.com/jeroenvisser101/project-switcher
sumber
Saya telah menggunakan cd utility saya sendiri untuk mengelola ini selama bertahun-tahun. Itu alias perintah cd Anda dan secara otomatis menyimpan tumpukan direktori.
sumber
Anda bisa menggunakan
export
untuk menetapkan jalur direktori Anda ke variabel dan kemudian referensi mereka.sumber
export
pernyataan di Anda~/.bashrc
, dan mereka akan selalu tersedia.Beberapa saran di sini:
Ide paling langsung, saya akan menambahkan alias dalam file profil
Kemudian gunakan
$ dir1
ataudir2
, bisa cdJika Anda selalu beralih dalam dua dir saja. menggunakan
cd -
akan beralih di antara mereka.sumber
Solusi yang saya gunakan untuk situasi ini adalah
screen
. Mulai layar dan buat jendela untuk setiap direktori denganC-a c
dan navigasi di sana. Ubah antara windows / direktori denganC-a n
atauC-a p
. Beri nama windows denganC-a A
. Kemudian Anda dapat memunculkan daftar windows AndaC-a "
dan menavigasi menggunakan nomor jendela atau nama. Karena ituscreen
, Anda dapat melepaskan dari sesi menghemat ruang kerja Anda dan melampirkan kembali nanti dengan pengaturan yang sama.sumber
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-cd
sana. Ini akan memungkinkan Anda untuk menavigasi di folder yang terakhir dikunjungi dan juga menentukanHotlist
direktori with dengan pilihan Anda:n-cd
dapat diikat ke kombinasi kunci dengan:sumber
TL; DR
Fish
untuk shell interaktif yang memberdayakan Anda segera (fish
>zsh
>bash
).POSIX
/Bash
untuk 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
:Zsh
+oh-my-zsh
:cd /e/x1
→cd /etc/X11/
);Fish
+oh-my-fish
(saat ini) adalah yang terbaik di luar kotak:Gunakan alias bermakna
Setiap shell dapat diperluas menggunakan
function
danalias
, berikut adalah yang saya gunakan terkait dengan masalah Anda (kompatibel POSIX):Ada yang dasar, tetapi sangat bermakna sehingga mudah diingat dan dilengkapi secara otomatis.
Kenali cangkang Anda
Konfigurasikan
CDPATH
untuk 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 pada
CDPATH
.Hangout dan baca
sumber
exit
, Anda keluar dari shell interaktif. Itu "alias bermakna" bisa sajaalias back='cd -'
danalias 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 jugaalias 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)anc
adalah alat garis cmd (kependekan dari anchor), yang menyimpan bookmark direktori. (sejauh ini hanya diuji dengan bash)Dalam kasus Anda:
ini menambahkan kedua direktori ke daftar anchor (think bookmarks)
sekarang jika Anda ingin melompat
/Project/Warnest/docs/
dari mana saja pada tipe sistem Anda:dan jika Anda ingin melompat untuk
~/Dropbox/Projects/ds/test/
mengetik:Selain mencocokkan teks dengan jalur yang ditandai, namun memiliki banyak cara mudah lainnya untuk melompat-lompat di direktori.
memulai mode interaktif, yang mencantumkan semua bookmark dengan nomor, sehingga yang harus Anda ketik adalah nomornya
Jika Anda mengetik:
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.
sumber