Apakah ada opsi dengan perintah 'ls' yang saya lihat hanya direktori?

74

Terkadang, saya perlu memeriksa hanya direktori bukan file. Apakah ada opsi dengan perintah ls? Atau adakah utilitas untuk melakukan itu?

EDIT : Saya menggunakan Mac OS X, dan ls -dmemberi saya .meskipun saya memiliki direktori.

prosseek
sumber
4
Adakah yang bisa menjelaskan mengapa ls -dmemberi saja .dan mengapa */harus ditambahkan pada bagian akhir untuk membuatnya bekerja?
cwd
3
@ cwd Jika Anda tidak menentukan file apa pun, lsdefaultnya adalah .. Dan -dartinya jangan cetak isi direktori, cetak direktori itu sendiri.
Mikel
1
@cwd coba gunakan ls -pitu menunjukkan /nama direktori setelah. Jadi */hanyalah sebuah pola yang cocok dengan nama direktori dan /kombo.
Pitt
Saya membuat fungsi yang mengimplementasikan jawaban @ Steven_D untuk file ~ / .bash_aliases saya: gist.github.com/rjurney/998f4951a57bfa5daeb9a6c18f6f4827
rjurney

Jawaban:

84

Saya tahu sudah ada jawaban yang dipilih, tetapi Anda bisa mendapatkan perilaku yang diminta hanya dengan ls:

ls -ld -- */

(Perhatikan bahwa tanda '-' menandai akhir parameter, mencegah nama folder yang diawali dengan tanda hubung dari ditafsirkan sebagai opsi perintah lebih lanjut.)

Ini akan mendaftar semua direktori yang tidak disembunyikan (kecuali jika Anda mengkonfigurasi gumpalan shell Anda untuk memperluasnya) di direktori kerja saat ini di mana direktori dijalankan (perhatikan bahwa itu juga termasuk tautan simbolis ke direktori). Untuk mendapatkan semua subdirektori dari beberapa folder lain, coba saja:

ls -ld /path/to/directory/*/

Perhatikan bahwa -l adalah opsional.

Steven D
sumber
5
Bagus. Saya tidak pernah menganggap bahwa direktori memiliki implisit /pada akhirnya - tetapi sekarang saya melihat Anda menjawabnya masuk akal. Bagaimanapun, penyelesaian-tab selalu menambahkannya.
gvkv
-d for dir, -l for long format. apa tujuannya --?
Dineshkumar
1
Walaupun ini terlihat pendek dan berfungsi untuk sebagian besar kasus, orang mungkin tidak ingin menggunakan pendekatan ini ketika direktori yang benar diperlukan, bukan symlink direktori. Jadi findsebenarnya merupakan pilihan yang baik dalam kasus itu.
ahli biokimia
1
findjuga memiliki keunggulan ketika jumlah direktori melebihi panjang argumen maksimum.
Steven D
Bekerja mundur, saya baru sadar Anda dapat mengabaikan apapun dengan ekstensi: ls -alhF --ignore=*.*. Tidak yakin seberapa baik ini akan menangani folder 'tersembunyi', yaitu.myHiddenFolder
Timmah
14

Tidak, tetapi findperintah sederhana akan melakukannya:

find . -type d -depth 1

atau grep

ls -F | grep /

Anda kemudian dapat alias salah satu jika perlu.

gvkv
sumber
6
Di Ubuntu 14.04 itu -maxdepth 1. Juga findingin saya membalik urutan:find . -maxdepth 1 -type d
Brad Cupit
Itu ls -F | grep /solusi keajaiban! Tampaknya menjadi satu-satunya yang bisa saya kerjakan pada mesin FreeBSD saya. Saya pikir menggunakan Fish berarti apa pun dengan */mungkin tidak berfungsi?
cjm
Saya tidak pernah bekerja dengan Fish jadi saya tidak yakin tentang itu tetapi opsi -F bisa bekerja dengan baik.
gvkv
7

Saya suka utilitas pohon untuk mendapatkan gambaran umum atas struktur direktori. Ini tersedia di MacPorts dan semua distribusi Linux yang saya coba.

tree -d -L 2

Itu akan menampilkan semua direktori, sedalam dua level.

Claes Mogren
sumber
6

Saya juga perlu melihat direktori tersembunyi sehingga telah memodifikasi saran di atas agar sesuai dengan kebutuhan saya

ls -d -- */ .*/

(tergantung pada shell, itu mungkin juga termasuk .dan ..)

Neil Chandler
sumber
2

Dengan zsh(seperti yang ditemukan secara default di macOS, bahkan dulu ada di /bin/shsana), Anda akan menggunakan kualifikasi glob untuk memilih file berdasarkan jenisnya:

  • Daftar direktori yang tidak disembunyikan:

    ls -d -- *(/)
    
  • Daftar semua direktori:

    ls -d -- *(D/)
    

    ( .dan ..selalu dikecualikan, tambahkan secara individual jika Anda menginginkannya)

  • Juga sertakan symlink ke direktori:

    ls -d -- *(D-/)
    

    ( -membuat kualifikasi lebih lanjut berlaku setelah resolusi symlink).

Stéphane Chazelas
sumber
-1

Saya pikir ls memiliki bug pada Mac OS X. Solusinya adalah menggunakan grep ... ls -l / | grep "^d"

duffbeer703
sumber
1
Menyenangkan mengetahui bahwa saya bukan satu-satunya orang yang menggunakan grep "^d"retasan
Michael Mrozek
6
Sejauh yang saya tahu, perilaku yang ia gambarkan bukanlah bug dan sama jika seseorang menggunakan GNU ls. Opsi -d menampilkan daftar untuk direktori dan bukan isinya. Untuk mengetahui mengapa hal ini bermanfaat, lihat perbedaan antara: ls -l /homedanls -dl /home
Steven D
Karat tidak khusus untuk cangkang. Anda bisa menggunakannya ls -l / | grep ^d. Jika Anda sedang akan menggunakan tanda kutip, karena Anda tidak perlu perluasan parameter, membuat mereka satu tanda kutip. ls -l / | grep '^d'. Ya, saya pedant. Tapi sungguh, lakukan ini. :)
Wildcard
-1
$ ls -p | grep /

The -pbendera akan membuat lsmenambahkan garis miring ( `/ ') setelah masing-masing nama file jika file yang direktori.

Jamin Shanti
sumber
-2

Cara termudah adalah dengan mengetik perintah berikut. Ini berfungsi di sebagian besar platform dan versi UNIX dan Linux. Anda dapat melewati -Fjika Anda inginkan, tetapi argumen yang menambahkan / ke akhir nama direktori. The -Cargumen menangkap hanya nama direktori - semua dari mereka di direktori saat ini. Jika Anda ingin melihat hanya direktori dan subdirektori di jalur saat ini, cukup tambahkan -Rargumen ( ls -CFR).

# ls -CF
/dir1  /dir2  /dir3  /beaches  /Work  /Other 
Willie Lopez
sumber
1
Dalam semua lsimplementasi yang saya tahu dan dalam spesifikasi POSIX ls, -Cadalah output dalam kolom , bukan untuk melewatkan file non-direktori. Dalam contoh Anda, /dicetak sebelum nama file, yang tidak ada lsimplementasi akan dilakukan. Dengan -F, /ditambahkan ke nama file untuk file direktori.
Stéphane Chazelas
Ketika saya melihat jawaban ini, saya bertanya-tanya, "Di mana ini benar?" @ StéphaneChazelas dan Jeff Schaller - tidakkah Anda menurunkan jawaban yang salah?
G-Man
-3
ls -G

ini akan menampilkan direktori Anda dengan warna biru

pengguna197967
sumber
1
Apakah Anda hanya melihat direktori ketika menggunakan perintah ini?
don_crissti