Terkadang menjengkelkan mengakses direktori dengan nama folder. Katakanlah saya memiliki direktori bernama a b c d
. Selain menggunakan Tab, apakah ada cara untuk mengakses folder tanpa mengetik nama direktori?
Saya tahu bahwa Linux memiliki pengidentifikasi unik setiap file tertentu. Bisakah saya menggunakan ini untuk mengakses folder? Saya tidak tahu apakah ini bisa dilakukan atau bagaimana melakukannya.
Saya pikir ketika Linux mengimplementasikan sistem file, ia membandingkan keunikan dua nama direktori. Jadi setiap direktori harus unik dalam satu spasi. Tapi saya pikir itu seperti kunci utama dalam sistem basis data. Apakah kunci utama nama direktori atau apakah ada pengidentifikasi unik lainnya (mungkin beberapa nomor disimpan "di bawah tenda")?
Coba pikirkan ini seperti sebuah proses. Jika Anda menjalankan perintah ps
pada terminal, itu menghasilkan daftar proses dengan nama dan nomor setiap proses. Anda harus memanggil proses itu dengan nomor proses. Demikian pula, apakah ada nomor untuk direktori sehingga Anda bisa memanggil direktori dengan nomornya alih-alih memanggilnya dengan namanya?
Pada penyelidikan lebih lanjut, saya telah menemukan bahwa setiap direktori memiliki keunikan inode
. Namun, sejauh ini saya belum menemukan perintah bawaan untuk mengakses direktori inode
.
sumber
zsh
alih-alihbash
cd $(icd XXXX)
--- Anda baru menulis ulangfind
bagian itu. Sekarang tugas Anda berikutnya adalah ... periksa apa yang lebih efisien, program Anda ataufind
:-P.Jawaban:
Solusi yang dibuat oleh OP
Tidak ada perintah bawaan yang ditemukan di sini. Tapi akhirnya saya bisa menulis program C untuk menggunakan cd (sebut saja program saya icd == (inode cd)) untuk masuk dalam folder menggunakan nilai inode. Di sini saya memposting kode mentah.
Tapi ada masalah mendasar yang saya hadapi di sini. Sementara coding mengeksekusi kode C dari bash diperlukan untuk membuat proses anak di bawah proses bash (proses induk). Dari proses anak, ruang direktori baru, dan saya tidak dapat mengakses ruang direktori proses induk dari sana. Jadi tidak ada yang bisa dilakukan kecuali memanggil bash window baru dari sini. Di masa depan saya akan mencoba menerapkan fitur tab baru jika orang tertarik pada ini. Tetapi saya percaya saya telah menghadapi banyak kritik karena melakukan ini. Jadi orang mungkin tidak tertarik. Saya baru saja selesai untuk hiburan saya.
Kode RAW dibagi di sini,
Saya menggunakan terminal gnome di sini. Tentunya untuk distro lain kodenya akan berubah.
sumber
Entitas apa pun di (kebanyakan) sistem file di Linux memiliki pengidentifikasi unik yang disebut
inode
. Perhatikan bahwa sebuah file dapat memiliki lebih dari satu nama ( hardlink ), tetapi direktori hanya memiliki satu tautan di semua sistem file yang saya ketahui. Perhatikan bahwa konsep inode bersifat lokal untuk sistem file, sehingga dalam dua perangkat yang berbeda (partisi atau apa pun) keunikannya tidak dijamin.Anda dapat melihat inode direktori Anda dengan
ls -ldi
:Jadi Anda tahu bahwa direktori Anda memiliki inode 20873234. Sekarang Anda dapat beralih ke sana dengan perintah:
(Perhatikan bahwa
2> /dev/null
ini adalah untuk menutup pesan kesalahan tentang direktori yang tidak dapat dibaca di sepanjang jalur.)Perintah ini akan memindai keseluruhan direktori home Anda, jadi bersabarlah. 1
Tapi bagaimana dengan menggunakan
cd
dan menyelesaikan TAB dari shell Anda?1. Ini pasti 2 halpalingtidak efisien yang pernah saya posting ... sebuah ode untuk entropi. Alasannya adalah bahwa "kunci utama" di mana akses ke file atau direktori dioptimalkan, cepat dan langsung - coba tebak? - pathname:
/dir/dir/file_or_dir
. Selain itu, untuk memberi Anda akses ke direktori yang diberikan, sistem perlu memeriksa semua izin di jalur ... jadi sekali lagi, mengakses dengan inode berarti memindai secara rekursif sistem file.2. Nah, Anda dapat memperburuk keadaan dengan memindai dari
/
. 33. Tetapi kemudian itu tidak akan berfungsi, karena inode hanya unik pada basis per-filesystem (per-mount).
sumber
/dir/dir/file_or_dir
. Program C Anda perlu memindai sistem file juga, danfind
telah dioptimalkan selama 40 tahun terakhir ... masih --- mengapa? Jika Anda memerlukan jalan pintas, gunakana="/my/really/strange and long/dir path name/"
lalucd "$a"
. Tidak bisa mengalahkannya Atau gunakan symlinks.Anda dapat Tabmemutar folder yang tersedia alih-alih mencantumkannya. Edit file
~/.inputrc
dan tambahkanJika Anda menginginkannya untuk semua pengguna, edit
/etc/inputrc
saja.Tekan Ctrl+ xdan Ctrl+ runtuk membuatnya efektif.
Sekarang gunakan
cd
Tabuntuk menavigasi ke folder Anda tanpa menulis namanya.cd
Shift+ Tabakan berputar ke arah lain.Layak diingat bahwa
cd -
akan membawa Anda ke folder yang terakhir dikunjungi.sumber
Anda dapat menggunakan shell wildcard.
Misalnya, saya bisa melakukannya
atau
Dan itu akan memperluas wildcard ke nama sebenarnya dan mengubah ke direktori itu. Anggap itu satu-satunya direktori yang cocok.
Jika Anda memiliki keduanya
a b c d
dana1b2c3d
, kemudiancd a?b?c?d
akan berkembang ke salah satucd a1b2c3d a b c d
ataucd a b c d a1b2c3d
(urutan aktual akan tergantung pada kernel, sistem file ...), dan bash akan diam-diam memindahkan Anda ke jalur pertama.Di sisi lain, Anda sering tidak memiliki folder dengan nama yang sama, jadi sesuatu seperti itu
a*d
sudah cukup untuk mengembangkannya tanpa harus mengetikkan semua karakter perantara. Ini sangat berguna ketika Anda tidak benar-benar dapat mengetiknya (mis. Nama-nama tersebut dalam skrip yang berbeda, atau bahkan penyandian yang berbeda), dan Anda mungkin perlu mengkode kode nama file.sumber
Anda dapat menemukan direktori ini di file manager, mis. Nautilus dan cukup drag dan drop ke terminal.
Jika sebelumnya Anda mengetik
cd
terminal, Anda akan mendapatkan perintah.sumber
Tidak yakin apakah itu yang Anda inginkan, tetapi
zsh
memiliki beberapa trik rapi untuk mengakses direktori dengan cara lain selain mengetikkan nama ketat direktori; untuk satu, Anda dapat mengetik bagian dari nama dan itu akan meluas ke nama lengkap direktori, yang memungkinkan untuk hal-hal yang sangat berguna, misalnya:Memukul TAB...
sumber
Cara paling sederhana adalah dengan mengklik dua kali pada nama direktori (dengan asumsi itu terlihat di layar), lalu ketik cd diikuti dengan spasi dan klik tombol roda pada mouse Anda dan itu akan menyalin dan menempelkan nama direktori yang telah Anda sorot. Menekan tombol enter kemudian akan berubah ke direktori yang diperlukan.
Saya menggunakan prosedur ini sepanjang waktu dan tidak hanya terbatas pada nama direktori. Itu dapat digunakan untuk perintah apa saja menggunakan baris perintah.
Semoga berhasil.
sumber
Jika hanya satu atau beberapa direktori, mengapa tidak ada alias di bashrc Anda atau file init apa pun? Sebagai contoh:
Lalu kapan pun Anda ingin masuk ke sana, ketikkan saja
abc
sumber
Anda bisa menulis program untuk membuat tabel hash untuk semua direktori OS Anda. Ini pada dasarnya akan menjadi program perataan pohon.
Tapi kemudian Anda bisa melakukan sesuatu seperti
hash-cd 32okjv02
dan itu akan melakukan pencarian tabel hash untuk32okjv02
pemetaan direktori. dan lompat ke direktori Anda. Dan itu akan sangat cepat setelah Anda mendapatkan semua direktori Anda diindeks.Anda harus alias mkdir untuk memanggil program ini setiap direktori baru dan mungkin menulis perintah check / refresh hash-table yang dapat Anda cron setiap menit dan saat masuk.
sumber