GNU/Linux >> Belajar Linux >  >> Linux

Perintah 'ls -d' tidak menampilkan direktori. Apakah ada cara untuk mendapatkan 'ls' untuk hanya menampilkan direktori, bukan file dan direktori?

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.


Linux
  1. Temukan file dan direktori di Linux dengan perintah find

  2. Cara Mudah Menyembunyikan File dan Direktori di Linux

  3. Apakah ada cara untuk mengubah id volume file .iso dari baris perintah?

  1. Temukan file dan direktori terbesar di Linux

  2. Bagaimana Cara Mendapatkan Hitungan File Dalam Direktori Menggunakan Baris Perintah?

  3. Hapus hanya file dalam direktori di direktori BUKAN linux

  1. Cara Menghapus Direktori dan File Menggunakan Linux

  2. Bagaimana agar hanya pengguna, pid dan perintah yang dijalankan untuk proses tertentu? (Ubuntu 11.10)

  3. cp hanya file, melewatkan direktori