Hal ini biasanya benar pada sistem unix bahwa jumlah link ke direktori adalah jumlah subdirektori ditambah 2. Namun ada kasus di mana ini tidak benar:
Beberapa kesatuan memungkinkan tautan keras ke direktori. Maka akan ada lebih dari 2 tautan yang tidak sesuai dengan subdirektori.
Ada filesystem di mana direktori tidak memiliki entri untuk .
dan ..
. The GNU menemukan petunjuk menyebutkan beberapa contoh dalam pembahasan nya -noleaf
pilihan (yang menonaktifkan optimasi yang mengasumsikan bahwa .
dan ..
ada di semua direktori): “CD-ROM atau MS-DOS filesystem atau volume AFS mount point”
Cara yang hampir dapat diandalkan untuk menghitung jumlah subdirektori (masih mungkin gagal jika nama file berisi karakter baris baru) adalah
$(($(LC_ALL=C ls -la /path/to/directory | grep '^d' | wc -l) - 2)
Cara yang lebih dapat diandalkan menggunakan gumpalan shell */
dan .*/
; seperti biasa menangani case di mana polanya tidak cocok sedikit menyusahkan (kecuali dalam bash dan zsh di mana Anda dapat mengaktifkan nullglob
opsi).
Gilles 'SANGAT berhenti menjadi jahat'
sumber
-type d
, tetapi: 1. ini membutuhkan GNU find; 2. Anda perlu mengurangi 1 untuk direktori awal (atau lulus-mindepth 1
).Jangan gunakan
ls
untuk ini . Inilah salah satu cara yang berfungsi dengan semua nama file, bahkan yang berisi baris baru, karena hanya mencetak karakter baris baru alih-alih nama file:Sunting: Versi saat ini tidak menghasilkan peringatan apa pun, karena
-mindepth
dan-maxdepth
harus sebelum-type
(pohon direktori dipangkas sebelum memeriksa direktori, untuk menghemat waktu).sumber