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 untuk dir
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
ls *
apa ls
perintah itu sendiri terima dari shell adalah (sesuatu seperti)
ls bin home opt var boot dev tmp dll hilang + ditemukan root usr
Apa yang -d
/ --directory
opsi ini adalah mematikan apa yang biasanya terjadi selanjutnya . Apa yang biasanya terjadi selanjutnya adalah ls
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 menggunakan find
perintah, seperti yang dijelaskan oleh ztank1013
, atau menggunakan trik bahwa pathname yang diakhiri dengan slash menyiratkan entri direktori .
, seperti yang dijelaskan oleh Jin
. ( Jin
Trik berakhir dengan ls
perintah yang menerima argumen
ls bin / home / opt / var / boot / dev / tmp / etc / lost + found / root / usr /
karena 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 lagi ls
: 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.