Kita tahu bahwa menggunakan cd <directory>
akan membuka direktori, jika ada!
Juga, cd ..
akan membawa kita naik satu tingkat dari direktori kerja saat ini.
Tetapi, ketika kita memiliki direktori bersarang dengan path yang lebih panjang seperti /home/thina/teams/td/tech/app/release/apks
, itu melelahkan untuk hanya masuk ke folder apks
dan juga sulit untuk kembali ke node lain, katakan di sini /home/thina/teams
.
Apakah ada cara untuk melewati pengetikan cd
dan cd ..
? Saya menggunakan Ubuntu 16.04.
command-line
bash
directory
gsthina
sumber
sumber
cd
dancd ..
?cd ../../../../..
CDPATH
variabel dalambash
dokumen.Jawaban:
Ada
pushd
danpopd
:Coba
help pushd
danhelp popd
untuk lebih banyak opsi. Tidak adaman
halaman, karenapushd
danpopd
adalah perintah built-in bash.sumber
cd -
melakukan hal yang sama?pushd
danpopd
dapat mengingat lebih dari satu jalur sebelumnya.dirs
untuk mendaftar tumpukan direktori Anda di dalam perintahpushd
/popd
.help pushd
danhelp popd
Anda sebutkan (sertahelp dirs
) tapi saya pikir saya akan menyebutkan bahwa dalam kasus orang ingin tahu di mana perintah ini berasal.help pusdh
Selain jawaban yang sangat baik yang telah disediakan, berikut adalah beberapa kiat untuk menggunakan
cd
secara efektif.cd -
akan membawa Anda kembali ke direktori terakhir tempat Anda berada.cd ../../..
akan membawa Anda naik 3 level sekaligus, Anda dapat menggunakan..
notasi dirantai bersama untuk 'naik' direktori sebanyak yang Anda suka.cd ..
, lalu gunakan bash history dengan menekan tombol panah untuk menggunakan perintah lagi.~
untuk berdiri di direktori home pengguna saat ini, jika Anda login sebagai pengguna thinacd ~/teams
, akan membawa Anda ke/home/thina/teams
cd
perintah, jika Anda mengetik bagian dari segmen jalur diikuti oleh Tab, segmen itu akan selesai jika tidak ada pilihan lain yang valid. Misalnya, jika Anda telah mengetikcd /home/thina/teams/td/t
lalu menekan Tab, kata tech akan diisi untuk Anda, selama tidak ada file atau direktori lain di direktori td yang dimulai dengan huruf t.Menggunakan tip-tip ini bersama-sama dapat membuat direktori traverse dengan
cd
jauh lebih menyakitkan.sumber
~
, terutama jika Anda root,~user
akan dengan cepat membawa Anda keuser
direktori home.Untuk naik di pohon beberapa level sekaligus, Anda dapat menggunakan fungsi berikut (terima kasih untuk muru untuk versi yang disempurnakan):
Maka Anda dapat melakukan:
Selain itu:
up
tanpa argumen sama dengancd ..
karena${1:-1}
pengganti yang$1
diatur saat dan1
sebaliknyacd ..
tujuan terakhir untuk mempertahankancd -
perilaku yang biasa .sumber
-gt
alih-alih>
.>
adalah leksikografis, ia membandingkan sebagai string. Juga, bukan membangun jalan, mengapa tidak melakukancd ..
dalam satu lingkaran:for i in $(seq "${1:-1}"); cd ..; done
? Itu bisa menghilangkanif
kondisinya juga.gt
komentar Anda , tetapi mengenai saran kedua Anda, lihat jawaban terakhir dalam jawabannya. Masuk akal bagi saya.OLDPWD
ke jalur asli. Ini versi lengkapnya: paste.ubuntu.com/17990874Untuk nama direktori yang panjang, gunakan variabel dengan path lengkap. Sebagai contoh,
Maka Anda bisa melakukannya dengan adil
cd "$APKS"
Adapun naik x jumlah direktori, saya memiliki fungsi ini didefinisikan dalam
.bashrc
Untuk kembali
/home/thina/teams
dariapks
Anda akan lakukanBerikut ini contoh penggunaan:
Fungsi kecil lain yang saya buat, tetapi tidak pernah banyak digunakan adalah
bookmark
fungsi.Begini cara kerjanya: ia menyimpan folder Anda saat ini untuk beberapa file, dan kemudian Anda dapat cd ke direktori tertentu berdasarkan nomor baris dalam file itu. Contoh:
Dan inilah fungsinya sendiri:
sumber
UPDATE: Ada alat yang bahkan lebih kuat daripada
autojump
:fasd
, tapi saya tidak terbiasa dengan hal itu.Saya terkejut tidak ada yang disebutkan
autojump
belum yangPada dasarnya apa yang telah dibangun oleh @graipher, dengan beberapa opsi tambahan.
Seperti yang telah saya sebutkan pada pertanyaan lain:
Setelah Anda melakukan cd beberapa kali ke direktori (bahkan cukup sekali saja):
cd /home/thina/teams/td/tech/app/release/apks
Anda dapat menggunakan jalan pintas
j
untuk pindah ke sana dengan cepat, terlepas dari direktori tempat Anda berada saat ini:j apks
Perhatikan bahwa menggunakan bagian mana pun dari jalur berfungsi, asalkan itu yang tertinggi dalam daftar:
j app
juga akan membawa Anda ke.../apks
jika Anda pergi ke sana lebih banyak daripada untuk.../app
.Saya akan merekomendasikan itu daripada memiliki skrip Anda sendiri karena itu dikelola dengan baik, didistribusikan untuk Ubuntu, dan memiliki fitur rapi lainnya, seperti lompat ke anak :
Telah pindah Anda untuk
apks
ditd
, daripada beberapa lainnyaapks
di bawah pohon yang berbeda.sumber
Alias
Saya memiliki daftar direktori yang sering digunakan, langsung tersedia melalui alias. Ini juga termasuk jalan pintas untuk direktori di hierarki.
Sekarang, ketika saya ingin naik tiga level, saya cukup mengetik
....<Enter>
dan itu dia!sumber
Aktifkan
autocd
opsi (shopt -s autocd
), sehingga Anda tidak perlu mengetikcd
. Misalnya, Anda hanya perlu perintah dua karakter..
untuk masuk ke direktori induk.Jika Anda menavigasi antara dua direktori, Anda dapat beralih di antara mereka dengan
cd -
, yang pergi ke direktori kerja sebelumnya. Theautocd
pilihan tidak membuat-
runcd -
tetapi Anda dapat menentukan alias atau fungsi untuk itu.Anda dapat mengingat direktori pada tumpukan dengan builtin
pushd
danpopd
. Builtindirs
mendaftar tumpukan direktori (saya menemukandirs -v
lebih mudah dibaca).Jika Anda sering berganti ke subdirektori dari direktori tertentu, dan subdirektori ini memiliki nama yang agak unik, tambahkan ke
CDPATH
variabel. Namun berhati-hatilah bahwa saya tidak pernah menemukan situasi di manaCDPATH
sebenarnya berguna.Anda dapat mengatur variabel ke nama direktori dan kemudian mengubahnya dengan
$foo
.Zsh memiliki beberapa fitur bagus yang tidak dimiliki oleh bash. Beberapa dari mereka dapat ditiru dengan menulis fungsi yang melakukan pekerjaan yang sama. Secara khusus bentuk dua argumen
cd
memungkinkan Anda dengan mudah mengubah ke direktori lain dengan nama yang sama, misalnya dari/home/thina/teams/td/tech/app/release/apks/com.acme/v1
, menjalankancd release beta
pergi ke/home/thina/teams/td/tech/app/beta/apks/com.acme/v1
.sumber
Karena saya sudah menjawab pertanyaan terkait UnixSE, saya menggunakan skrip bernama z [github] untuk ini.
Ia mengingat direktori tempat Anda cd, memberi peringkatnya berdasarkan frecency (frekuensi + kebaruan) dan memungkinkan Anda untuk mengubah ke salah satu jalur yang diingat menggunakan beberapa bagian dari namanya.
Setelah di-cd ke direktori setidaknya sekali Anda bisa melakukan misal alih-alih:
Lakukan saja:
yang akan bekerja, menggunakan pencocokan nama parsial (dengan asumsi Anda tidak memiliki direktori lain yang mengandung di dalamnya sub istilah dan yang memiliki frekuensi lebih tinggi).
Saya juga mendefinisikan fungsi seperti ini, yang pertama kali mencoba cd normal dan jika gagal menggunakan z:
Ini memberi Anda yang terbaik dari keduanya. Jika folder ada di direktori saat ini atau path lengkap yang valid diberikan, itu hanya akan cd di sana, tetapi jika tidak akan mencoba untuk menemukan kecocokan dalam database dan cd di sana. Ini menghilangkan rasa sakit (kecil) dari terkadang harus menggunakan cd (untuk melatih basis data, pergi ke folder yang belum pernah Anda kunjungi sebelumnya) dan kadang-kadang mengingat untuk menggunakan z, jika berlaku.
sumber
cd
milik Anda tidak mengganggu bagaimanaz
membangun database direktori yang sering dikunjungi?autojump
?Tiga opsi lagi yang saya temukan berfungsi dengan baik (meskipun saya mungkin di masa depan menggunakan
pushd
lebih banyak, saya baru saja belajar tentang itu):Atur jalur Anda sehingga Anda tidak perlu ke
cd
direktori yang bersarang di tempat pertama, atau lebih tepatnya: sehingga lokasi yang perlu Anda kunjungi sering tepat di ujung jari Anda. Cara untuk mencapai hal ini adalah dengan symlink : pertahankan direktori yang eksplisit dan ters hierarki dengan baik, tetapi buat tautan akses cepat untuk kenyamanan Anda sendiri.Kemudian, alih-alih mengetik jalur panjang ke
cd
, cukup gunakancd ~/apks
, dancd ../teams
(atau, dalam contoh itu preferrable,~/teams
) untuk kembali.Jangan gunakan satu shell dan cd bolak-balik di antara jalur, tetapi tetap menjalankan satu shell untuk setiap jalur yang Anda butuhkan. Ada beberapa level untuk mencapai multitasking ini:
tmux
.Hanya meluncurkan tindakan dalam perintah tujuan tunggal yang
cd
masuk ke folder, melakukan satu hal di sana dan segera memberikan kontrol kembali pada folder asli: alih-alihcukup lakukan satu-liner
atau setara
Jangan
cd
sama sekali , tetapi cukup jalankan perintah langsung dari direktori home Anda. Perluasan Brace dapat banyak membantu di sini: Alih-alihAnda dapat melakukan
sumber
pushd
sangat bermanfaat sekali. Anda mungkin ingin menambahkan lebih banyak info tentang bagaimana menggunakannya untuk membuat jawaban Anda lebih baik.Pushd dan Popd
Perintah
pushd
danpopd
adalah favorit saya. Thepushd
perintah akan ingat direktori yang dikunjungi, dapat dilihat dengan perintahdirs
, dan ketika Anda siap untuk melompat ke belakang menggunakanpopd
untuk kembali.Berikut ini contoh menggunakan fungsi bash dan alias:
Saya terus-menerus menggunakan campuran dari perintah-perintah ini dalam berbagai cara.
Alias
Pilihan lain untuk direktori yang sering diakses adalah dengan hanya alias
cd
ataupushd
perintah. Jadi, gunakan contoh dari pos Anda:Kombinasi
Gabungkan dua ide dan Anda bahkan dapat memiliki ini:
Yang kemudian memberi Anda banyak fleksibilitas dalam melintasi direktori. Saya menjaga
cd***
dansd***
alias di tangan untuk hal-hal sepertiDesktop
,Documents
,Music
,Downloads
, dll dan itu sangat berguna!sumber
Coba z.lua - Perintah cd baru yang membantu Anda menavigasi lebih cepat dengan mempelajari kebiasaan Anda.
cd ke direktori berisi foo:
cd ke direktori berakhir dengan foo:
gunakan beberapa argumen:
Dengan asumsi database berikut:
"z in"
akan masuk/home/user/mail/inbox
sebagai entri berbobot lebih tinggi. Namun Anda dapat meneruskan beberapa argumen ke z.lua untuk memilih entri yang berbeda. Dalam contoh di atas,"z w in"
lalu akan mengubah direktori menjadi/home/user/work/inbox
.cd dengan pilihan interaktif:
Ketika ada beberapa kecocokan yang ditemukan, menggunakan
z -i
akan menampilkan daftar:Kemudian Anda dapat memasukkan nomor dan memilih ke mana harus pergi sebelum cd yang sebenarnya. misalnya. masukan 3 ke cd ke
/home/data/software
. Dan jika Anda hanya menekan ENTER dan tidak memasukkan apa pun, itu hanya akan berhenti dan tetap di tempat Anda.z.lua
juga mendukungfzf
untuk pemilihan interaktif atau penyelesaian argumen:selesai dengan fzf
cepat kembali ke orang tua tanpa mengetik
cd ../../..
:Opsi baru
"-b"
dapat dengan cepat kembali ke direktori induk tertentu di bash alih-alih mengetik "cd ../../ .." secara berlebihan:(Tidak ada argumen) :
cd
ke dalam root proyek, root proyek direktori induk terdekat dengan.git
/.hg
/.svn
di dalamnya.(Satu argumen) :
cd
ke induk terdekat yang dimulai dengan kata kunci, jika tidak ditemukan, buka induk yang berisi kata kunci.(Dua argumen) : ganti nilai pertama dengan yang kedua (di jalur saat ini).
...
Mari kita mulai dengan aliasing
z -b
kezb
:Berharap itu bisa sesuai dengan kebutuhan Anda.
sumber
ikan memiliki beberapa fasilitas bagus untuk bergerak dengan cepat.
Juga, saya menjaga direktori favorit saya tetap terhubung ke ~ / f, jadi saya bisa cd ~ / f / x untuk sampai ke ~ / foo / bar / baz / data eksperimen.
sumber
Saya sudah lama menggunakan alias untuk direktori yang sering diakses.
Saya juga memiliki fungsi bash yang disebut ccb (kependekan untuk membuat file bat cd - ini berasal dari dos / windows di mana script .bat shell ccb.bat akan membuat file .bat lain untuk melompat ke direktori saat ini) yang membuat / menambahkan alias (dalam file .bash_aliases) ke direktori saat ini.
misalnya: $ ccb myfav akan membuat alias ke direktori saat ini dengan alias myfav di file .bash_aliases dan sumber file .bashrc sehingga alias segera tersedia.
Saya baru saja menemukan solusi baru. Ini fungsi bash
ini tidak perlu belajar apa pun dari penggunaan sebelumnya. Masalah yang mungkin tidak dipecahkan ini adalah: jika ada lebih dari 1 direktori bernama "deep_nested_dir_name" di pohon sub-direktori, maka ia akan melompat ke 1 direktori yang ditemukan oleh find.
Juga, solusi ini tidak akan bisa kebagian pohon direktori lain.
antara hardcod alias atau dihasilkan alias dan fungsi lj () baru ini, sebagian besar kebutuhan saya diurus.
Inilah fungsi ccb () saya untuk siapa saja yang ingin menggunakannya
sumber