Harapan Anda didasarkan pada DOS Think/Windows Think dan itu salah. Pada MS-DOS, Windows, dan beberapa sistem operasi IBM/Microsoft lainnya, perluasan karakter pengganti dilakukan dengan perintah itu sendiri, dan hal-hal seperti /a
ke dir
perintah bertindak sebagai filter atribut selama ekspansi wildcard. dir
memperluas karakter pengganti seperti *
, yang diteruskan oleh penerjemah perintah apa adanya, dan if /a
ditentukan itu menerapkan filter yang sesuai untuk apa yang dikembalikan. (Pada beberapa sistem operasi, filter atribut dapat diberikan ke panggilan sistem untuk menghitung direktori dan kernel sistem operasi, atau driver sistem filenya, menerapkannya sendiri.)
Di Unix dan di Linux, ekspansi wildcard dilakukan oleh shell, dan tidak memperhatikan izin. Ketika, di direktori root, Anda melakukan
ls *
apa itu ls
perintah itu sendiri menerima dari shell adalah (sesuatu seperti)
ls bin home opt var boot dev tmp etc lost+found root usr
Apa itu -d
/--directory
opsi yang dilakukan adalah mematikan apa yang biasanya terjadi selanjutnya . Yang biasanya terjadi selanjutnya adalah ls
itu melihat setiap argumennya secara bergantian, melihat bahwa itu adalah direktori, dan memutuskan untuk menghitung isinya. Untuk argumen yang menamai file, itu hanya mencetak informasi untuk file itu sendiri. Dengan -d
opsi, direktori diperlakukan seperti file. Jadi ls
mencetak informasi untuk setiap direktori yang diteruskan sebagai argumennya, sama seperti jika itu adalah file.
Jadi -d
tidak opsi "cetak direktori saja". Nyatanya, tidak hanya tidak ada pilihan seperti itu; ada tidak bisa opsi seperti itu. Ekspansi wildcard dilakukan oleh shell, dan (dalam POSIX sh
setidaknya) tidak ada cara untuk memberi tahu shell untuk memeriksa izin dan jenis file bit saat memperluas *
ke dalam daftar nama. Untuk mendapatkan daftar nama direktori saja, perlu juga menggunakan find
perintah, seperti yang dijelaskan oleh ztank1013
, atau menggunakan trik bahwa nama path yang diakhiri dengan garis miring menyiratkan entri direktori .
, seperti yang dijelaskan oleh Jin
. (Jin
trik berakhir dengan ls
perintah menerima argumen
ls bin/ home/ opt/ var/ boot/ dev/ tmp/ etc/ lost+found/ root/ usr/
karena polanya */
sebenarnya mencocokkan nama path dengan dua komponen, yang kedua kosong, jadi tidak cukup melakukan apa yang diinginkan. Secara khusus, itu akan memperlakukan tautan simbolik yang menunjuk ke direktori seolah-olah itu adalah direktori.)
Perilaku ls -d
tanpa *
adalah perpanjangan sederhana di atas. Kita hanya perlu mengetahui satu hal lagi tentang ls
:Ketika tidak diberikan argumen, ini mengasumsikan argumen default .
. Sekarang tanpa -d
opsi, perilaku tersebut mengarah ke isi direktori yang dinamai dengan .
sedang dihitung dan informasi untuk isinya ditampilkan. Dengan -d
opsi, direktori .
diperlakukan seolah-olah itu adalah file, dan informasinya sendiri ditampilkan, bukan isinya yang disebutkan.
Anda dapat menggunakan ls -d */
, atau ls -d .*/
untuk direktori tersembunyi.
Coba ini
find . -mindepth 1 -maxdepth 1 -type d
untuk mendapatkan hanya direktori di bawah lokasi Anda saat ini.