Apa cara baris perintah cepat untuk beralih di antara banyak direktori untuk administrasi sistem? Maksud saya, saya dapat menggunakan pushd .
dan popd
beralih, tetapi bagaimana jika saya ingin menyimpan kelipatan dan memutarnya, daripada secara permanen mengeluarkannya dari bagian bawah tumpukan?
bash
shell-script
administration
Volomike
sumber
sumber
$CDPATH
mungkin?cd -
setelah googling dihasut dari pertanyaan ini.cd
mana-mana dengan tangan. Sangat menyakitkan. Namun, pelengkapan otomatis yang digunakan dengan tombol tab.Jawaban:
Gunakan
pushd
dan kemudian nama-nama khusus untuk direktori di direktori stack Anda:~1
,~2
, dllContoh:
Cara paling efektif untuk digunakan
pushd
dengan cara ini adalah memuat daftar direktori Anda, kemudian menambahkan satu direktori lagi menjadi direktori Anda saat ini, dan kemudian Anda dapat melompat di antara angka-angka statis tanpa mempengaruhi posisi direktori di tumpukan Anda.Perlu juga dicatat bahwa
cd -
akan membawa Anda ke direktori terakhir tempat Anda berada. Begitu jugacd ~-
.Keuntungan dari
~-
atas hanya-
adalah bahwa-
khusus untukcd
, sedangkan~-
diperluas oleh shell Anda dengan cara yang sama~1
,~2
, dll. Ini sangat berguna saat menyalin file di antara jalur direktori yang sangat panjang; misalnya:Di atas setara dengan:
sumber
cd -
cd -
bertindak seperti ForthDROP DUP
, misalnya jika seseorang mulai dengan di direktori a , dengan stack abcd , acd -
mengubah stack menjadi bbcd . Mungkin itubash
bug, karena yang keduacd -
mengubah stack kembali ke abcd . Dari sini kita dapat menyimpulkan bahwacd -
menggunakan beberapa struktur data terpisah untuk menyimpan direktori sebelumnya, selain mengubah tumpukan.cd -
kegunaan$OLDPWD
dan tidak ada yang lain.cd -
sebelumnya , kemudian mereka menambahkan tumpukan, tetapi takut melanggar kode lama lebih dari yang mereka inginkan desain yang lebih sederhana. Koreksi ke sebelumnya, bertindak seperti Forth Berbeda , mencetak nama direktori swapped-in.cd -
OLDPWD @ SWAP OLDPWD ! DUP .
cd foo
cd -
bash
builtinpushd
dengan opsi+
dan-
dapat memutar tumpukan direktori. Sintaksnya bisa sedikit membingungkan, mungkin karena tumpukan itu adalah array berbasis nol . Fungsi pembungkus sederhana ini berputar melalui tumpukan direktori:Tes: mengatur tumpukan empat direktori.
Sekarang / tmp adalah direktori saat ini, dan tumpukan terlihat seperti:
Ubah ke direktori berikutnya dalam tumpukan, (dan perlihatkan), empat kali:
Keluaran:
Ubah ke direktori sebelumnya dalam tumpukan, (dan perlihatkan), empat kali:
Keluaran:
Catatan tentang
cd -
: Jawaban Wildcard membantu menggambarkan bagaimanacd -
tidak menggunakan array $ DIRSTACK , (menggunakan variabel $ OLDPW ), sehinggacd -
tidak mempengaruhi $ DIRSTACK seperti seharusnya swap berbasis stack. Untuk memperbaikinya, inilah fungsi swap sederhana berbasis $ DIRSTACK :Uji:
Keluaran:
sumber
popd
, untuk menghapusnya tanpa mengubah dir, lakukanpopd -n
. Untuk menghapus tumpukan lakukandirs -c
. Sayang sekali para desainer bash mengubur fungsi-fungsi bermanfaat seperti itu dalam sintaksis non-intuitif. Lihat diman bash
bawahpushd
,,dirs
dll.Saya sarankan Anda menginstal fasd . Ini memberi Anda kemampuan untuk dengan cepat melompat ke direktori mana pun Anda sudah berada dengan mengetikkan hanya sebagian kecil dari namanya.
Contoh: jika Anda mengunjungi
/home/someName/scripts/
, Anda bisa melompat ke sana hanya dengan mengetikz scr
misalnya. Itu jauh lebih nyaman jika mengingat urutan di tumpukan riwayat atau yang serupa.sumber
Saat Anda berada di
cd
suatu tempat, Bash menyimpan variabel lingkungan direktori kerja lama$OLDPWD
,.Anda dapat beralih kembali ke direktori dengan
cd -
, yang setara dengancd "$OLDPWD"
.Anda dapat bangkit bolak-balik antara direktori seperti:
sumber
Saya menulis sebuah skrip bernama
xyzzy
untuk melakukan ini:Cara saya menggunakan ini adalah menyalin ke dalam
/usr/bin
folder dan kemudianchmod a+x
di atasnya. Lalu, saya mengedit~/.bashrc
file akun root dan akun pengguna saya untuk memasukkan baris-baris ini di bagian bawah:'Xy' adalah bentuk singkat dari perintah untuk mengetik lebih cepat.
Lalu, saya dapat menyimpan direktori saat ini dalam daftar dengan ...
... dan ulangi seperlunya. Setelah saya mengisi daftar ini dengan direktori yang saya butuhkan, mereka tetap di sana sampai saya me-reboot komputer karena saat itulah / tmp dihapus lagi. Saya kemudian dapat mengetik ...
... untuk mendaftar direktori yang saat ini disimpan. Untuk beralih ke direktori, saya punya dua pilihan. Salah satu opsi adalah menentukan jalur dengan indeks (dan ini adalah indeks berbasis 1) seperti:
... yang akan beralih ke direktori itu item kedua dalam daftar. Atau, saya dapat mengabaikan nomor indeks dan lakukan:
... untuk memilikinya loop melalui setiap direktori yang saya butuhkan. Untuk perintah lain yang bisa Anda lakukan, ketik:
Tentu saja, bekerja lebih menyenangkan dengan pernyataan gema konyol yang saya tambahkan.
Perhatikan bahwa xyzzy adalah referensi ke petualangan teks Gua Collosal , di mana mengetik xyzzy akan memungkinkan Anda beralih di antara dua kamar dalam permainan untuk menghindari grues.
sumber
Saya menggunakan skrip kecil bernama z [tautan] , yang mungkin juga menarik, meskipun tidak melakukan persis apa yang Anda minta.
sumber
Ada juga
cd_func
dari Petar Marinov, pada dasarnyacd
dengan riwayat hingga 10 entri: http://linuxgazette.net/109/misc/marinov/acd_func.htmlHanya gunakan
cd --
untuk menunjukkan daftar masa lalu hingga 10 direktori yang Andacd
edit dancd -N
(di manaN
indeks entri) untuk pergi ke sana.sumber
Saya kebanyakan menggunakan ZSH dengan profil oh-my-zsh . Anda dapat mengetik ke terminal yang cocok dengan berikut:
Kemudian Anda cukup menggunakan panah (atas dan bawah) untuk menelusuri semua riwayat shell yang hanya menampilkan entri yang dimulai dengan karakter di atas. Jadi, misalnya, jika Anda pergi ke
/home/morfik/Desktop/
dan/home/morfik/something/
, Anda dapat beralih di antara direktori dengan sangat cepat. Tidak masalah berapa banyak entri dalam riwayat shell yang Anda miliki, tetapi ketika Anda memiliki banyak entri, cukup gunakan ekspresi yang lebih baik, yaitucd /home/morf
dan di sini tekan panah atas / bawah pada keyboard Anda.Ada juga cara lain untuk mencapai solusi. Dalam hal ini Anda harus menggunakan tmux dan FZF . Kemudian Anda hanya membuat hotkey, misalnya ctrl-r, dan ketika Anda menekannya, jendela Anda saat ini akan dibagi dan Anda akan melihat ini:
Sekarang Anda dapat menggunakan ekspresi untuk mencari daftar. Saya baru saja mengetik
^cd /media
, yang hanya mengembalikan entri yang dimulai dengan frasa. Tentu saja, Anda cukup mengetik'cd 'home
untuk mencocokkan perintah dan juga seluruh nama direktori (bukan path, hanya nama):sumber
Anda dapat mencapai ini dengan banyak alias di
~/.bashrc
(atau setara) AndaTujuan utamanya adalah pengetikan mendekati minimum (mis.
d5
Melompat ke nomor direktori 5 di kumpulan) untuk beralih di antara direktori di kumpulan. Kami juga ingin membuatnya mudah untuk menambah / menghapus direktori ke / dari kumpulan:Sekarang setiap kali Anda mendorong direktori pada tumpukan itu akan ditambahkan ke kolam bernomor di posisi 0 (dir saat ini) dan Anda dapat melompat-lompat (beralih direktori) menggunakan sangat sedikit mengetik (
d<N>
) dan Anda dapat melihat kolam saat ini bernomor Anda di mana saja waktu hanya dengan mengetikd
.Beberapa contoh penggunaan alias ini:
Tampilkan pool-dir bernomor, (dir saat ini adalah # 0)
Beralih di antara dir: gunakan
d<N>
Tambahkan direktori baru ke kumpulan
Lompat lagi:
Hapus / pop bagian atas (saat ini) dir dari kolam
sumber
Jika Anda sudah menginstal iselect , Anda dapat melakukan sesuatu seperti ini:
Ini akan memberi Anda menu navigasi tombol panah interaktif berbasis ncurses layar penuh untuk memilih direktori
cd
.Jika Anda belum pernah menggunakan
pushd
sesi shell saat ini, daftar direktori dalam menu dimulai hanya dengan satu entri, direktori Anda saat ini. Jika hanya ada satu entri,dirselect
alias ini hanya akancd
ke sana tanpa layar menu, sehingga secara efektif tidak melakukan apa-apa (kecuali mencegahcd -
dari melakukan sesuatu yang bermanfaat)Untuk menambahkan direktori baru ke daftar, gunakan
pushd dir
(ataupushd -n dir
untuk menambahkan dir tanpacd
-ing pada saat yang sama)Anda dapat mengisi ulang
pushd
tumpukan dengan melakukan sesuatu seperti yang berikut di.bashrc
atau~/.bash_profile
:Anda dapat menghapus entri dengan
popd
ataupopd -n
.Lihat
help pushd
,,help popd
danhelp dirs
dalam bash untuk info lebih lanjut. Dan tentu sajaman iselect
,.BTW,
iselect
mungkin tersedia pra-paket untuk distro Anda. Ini untuk Debian dan Ubuntu dll, dan mungkin untuk orang lain juga.sumber
Jika Anda memiliki 5 atau 10 direktori yang sering Anda gunakan, dan tidak perlu peduli dengan direktori 5 atau 10 yang baru digunakan , siapkan beberapa alias perintah seperti
Jadi ketika saya ingin pergi ke direktori home page Apache saya cukup ketik
cdw
seperti yang saya jawab di Equivalent of alias untuk tautan simbolik? .sumber
Saya menggunakan lompatan untuk dengan cepat mengubah direktori kerja.
Untuk menambahkan direktori saat ini:
Untuk membuat daftar semua bookmark Anda:
misalnya:
Sekarang Anda dapat dengan mudah melompat ke direktori lain:
Ini mendukung pelengkapan otomatis untuk bash dan zsh.
Sunting (sebagai respons terhadap @Joe): biner
jump-bin
disimpan/usr/local/bin
, dan dengan skrip integrasi bash (di PC saya yang terletak di/var/lib/gems/1.9.1/gems/jump-0.4.1/bash_integration/shell_driver
) ia membuat fungsi bashjump
yang memanggiljump-bin
.sumber
Saya gunakan
alias
untuk menavigasi. Jika Anda memiliki beberapa direktori yang sering diakses, maka cukup setel alias. Sebagai contoh,Maka sederhananya
akan membawamu ke
/etc
.sumber