Apakah ada cara untuk ls
hanya menampilkan direktori alih-alih file dan direktori?
Dari halaman manual:
-d, --directory
list directory entries instead of contents, and do not derefer‐
ence symbolic links
Jadi jika saya mengetiknya di /
direktori saya berharap hanya melihat direktori. Sebaliknya itu menunjukkan "."
$ cd /
$ ls -d
.
Saya berharap ls -d
untuk menunjukkan ini kepada saya:
$ ls -d
bin data home opt sbin sys var
boot dev lib media proc selinux tmp
cdrom etc lost+found mnt root srv usr
Apakah ada cara untuk ls
hanya menampilkan direktori alih-alih file dan direktori?
-d
tidak bermaksud mendaftar direktori saja, itu berarti tidak mendaftar isi direktori. Coba ketikkanls */
dan Anda akan melihat isi dari semua direktori.ldir
alised kels -d */
dalam saya.bashrc
ini lebih mudah ... untuk membuatJawaban:
Harapan Anda didasarkan pada DOS Think / Windows Think dan salah. Pada MS-DOS, Windows, dan memang beberapa sistem operasi IBM / Microsoft lainnya, ekspansi wildcard dilakukan oleh perintah itu sendiri, dan hal-hal seperti
/a
opsi untukdir
perintah tersebut bertindak sebagai filter atribut selama ekspansi wildcard.dir
memperluas wildcard seperti*
, yang ditafsirkan oleh penerjemah perintah, apa adanya, dan jika/a
ditentukan, berlaku filter yang sesuai dengan apa yang dikembalikan. (Pada beberapa sistem operasi, filter atribut dapat diberikan kepada panggilan sistem untuk penghitungan direktori dan kernel sistem operasi, atau driver sistem file, menerapkannya sendiri.)Pada Unices dan di Linux, ekspansi wildcard dilakukan oleh shell, dan tidak mengetahui izin. Ketika, di direktori root, Anda melakukannya
apa
ls
perintah itu sendiri terima dari shell adalah (sesuatu seperti)Apa yang
-d
/--directory
opsi ini adalah mematikan apa yang biasanya terjadi selanjutnya . Apa yang biasanya terjadi selanjutnya adalahls
melihat pada masing-masing argumen pada gilirannya, melihat bahwa mereka adalah direktori, dan memutuskan untuk menyebutkan isinya. Untuk argumen yang menamai file, itu hanya mencetak informasi untuk file itu sendiri. Dengan-d
opsi ini, direktori diperlakukan seperti file. Jadi,ls
cetak informasi untuk masing-masing direktori yang dilewatkan sebagai argumennya, sama seperti yang akan dilakukan jika mereka adalah file.Jadi
-d
bukan opsi "print only directories". Bahkan, tidak hanya tidak ada opsi seperti itu; ada tidak bisa menjadi seperti pilihan. Ekspansi wildcard dilakukan oleh shell, dan (sh
setidaknya dalam POSIX ) tidak ada cara untuk memberitahu shell untuk memeriksa izin dan tipe file bit ketika diperluas*
menjadi daftar nama. Untuk mendapatkan daftar nama-nama direktori saja, perlu menggunakanfind
perintah, seperti yang dijelaskan olehztank1013
, atau menggunakan trik bahwa pathname yang diakhiri dengan slash menyiratkan entri direktori.
, seperti yang dijelaskan olehJin
. (Jin
Trik berakhir denganls
perintah yang menerima argumenkarena pola
*/
sebenarnya mencocokkan nama path dengan dua komponen, yang kedua kosong, dan tidak cukup melakukan apa yang diinginkan. Secara khusus, ini akan memperlakukan tautan simbolis yang menunjuk ke direktori seolah-olah itu adalah direktori.)Perilaku
ls -d
tanpa a*
adalah perpanjangan sederhana di atas. Satu hanya harus tahu satu hal lagils
: Ketika tidak diberikan argumen, itu mengasumsikan argumen default.
. Sekarang tanpa itu-d
pilihan, perilaku mengarah tersebut dengan isi direktori nama oleh.
yang disebutkan dan informasi untuk isinya ditampilkan. Dengan yang-d
pilihan, direktori.
diperlakukan hanya seolah-olah itu sebuah file, dan informasi sendiri ditampilkan, bukan isinya disebutkan.sumber
dir /s *.txt
[tanpa menggunakan untuk mengutip wildcard seperti untuk menemukan]ls
bisa memiliki opsi untuk memfilter file atau direktori, dan ini tidak eksklusif dengan memiliki shell melakukan ekspansi. Tidak ada kondisi balapan di dalam ls: ia dapat memfilternya karena statistik file secara normal. (Sudah ada perlombaan antara ekspansi shell dan ls, FWIW.) Saya pikir ekspansi shell hanya bagian dari alasannya: ekspansi shell (dan penyaringan secara umum) tidak diterapkan di ls karena itu perlu diimplementasikan lagi di cp , mv, dll. Unix adalah "lakukan satu hal dan lakukan dengan baik". Jika Anda memerlukan pemfilteran tingkat lanjut, ada alat untuk itu.ls -p
pilihan menambahkan/
simbol ke direktori saja. Tidak ada alasan untuk tidak memperluas kemampuan pencetakan dengan sesuatu yang hanya menghasilkan ini (bukanls -p | grep /
).ls --only-directories .
opsi dapat ditambahkan padals
akhirnya.Anda dapat menggunakan
ls -d */
, atauls -d .*/
untuk direktori tersembunyi.sumber
Coba ini
untuk mendapatkan direktori di bawah lokasi Anda saat ini.
sumber
Anda mungkin juga suka
yang dengan rapi mencantumkan semua direktori dan subdirektori dengan penggambaran grafis struktur pohon.
sumber
tree -dL 1
Jika Anda ingin melihat direktori hanya dengan
ls -l
opsi detail seperti (ELL) maka Anda dapat menggunakan di bawah ini:Di atas hanya akan memberikan detail seperti yang Anda dapatkan dengan
-l
pilihan.sumber
find -maxdepth 1 -type d -exec ls -d {} +
untuk mendapatkan output dalamls
format yang biasa .Jika Anda ingin menyelesaikan pekerjaan dengan cara lain, coba ini:
ls -l | grep ^d
Meskipun satu alat sudah cukup dalam situasi ini. Jalur pipa selalu ada untuk membantu Anda. Saya suka fleksibilitas di Linux, yang saya harap Anda lakukan.
sumber
Saya harap ini akan memperbaiki kebutuhan Anda. Perintah di bawah ini hanya akan menampilkan direktori di jalur yang diberikan.
Contoh:
sumber