Unix sistemindeki her dizin (ve muhtemelen diğer tüm sistemler de) en az iki dizin girişi içerir. Bunlar .
(geçerli dizin) ve ..
(üst dizin). Kök dizin durumunda, bunlar aynı yeri gösterir, ancak diğer herhangi bir dizinde farklıdır. Sen kullanarak kendiniz görebilirsiniz stat
, pwd
ve cd
(Linux üzerinde) komutları:
$ cd /
$ stat . .. bin sbin | grep Inode
Device: 802h/2050d Inode: 2 Links: 27
Device: 802h/2050d Inode: 2 Links: 27
Device: 802h/2050d Inode: 548865 Links: 2
Device: 802h/2050d Inode: 2670593 Links: 2
$ pwd
/
$ cd ..
$ pwd
/
$
Dikkat edin bin
ve sbin
her birinin iki bağlantısı vardır. Biri kök dizindeki dizin girişi, diğeri ise .
o dizinin içindeki giriş.
ls
Bir boru ile kullanmak wc -l
, ls çıkışındaki satır sayısını saymak için basit bir numaradır. Varsayım, her dosya veya dizinin çıktıda tam olarak bir satır kaplayacağıdır. GNU ls, çıkış terminal dışı olduğunda bunu otomatik olarak yapar; diğerleri -1
ise davranışı açıkça açma seçeneğine ihtiyaç duyabilir . girişindeki wc -l
satır ( -l
) sayısını sayar ve çıktı verir .
Bu yaklaşımla ilgili sorun, Linux'ta ve Linux'ta geleneksel olarak kullanılan dosya sistemlerinde dosya ve dizin adlarının (bu bağlamda gerçekten bir ve aynı oldukları) yeni satır karakterleri içermesine izin verilmesidir . Bunların varlığında, her iki yöntem de parçalanır - bu girdiler, gerçekte bir olduklarında iki veya daha fazla giriş olarak sayılacaktır.
GNU l'leri kullandığınız sürece, yeni satır karakterleri içeren adlara sahip dizin girişleriniz olmadığı ve ls
(örneğin ls -a
) için tek takma adların olmadığı sürece , her ikisi de geçerli (veya belirtilen) dizindeki dosya ve dizin sayısını verir. Çoğu insan için bu yeterince iyidir, ancak genel durumda geçerli değildir .
Dizin giriş adlarında olağandışı karakterleri (özellikle yeni satırlar) düzgün bir şekilde işlemeniz gerekiyorsa, -b
onlardan kaçmak için ls seçeneğini kullanmanızı öneririm . ls -1bA
her dizin girişi adını kendi satırına yazdıracak, olağandışı karakterlerden kaçacak (böylece her dizin girişi bir tane olarak görülecektir), herhangi bir dotfiles ve -directories dahil. Tack wc -l
tam bir komut satırı için ls -1bA | wc -l
(ama görmezden geçerli dizinde dosya ve dizinleri sayısını bildirir ki .
ve ..
; aramdaki fark -a
ve -A
), ancak herhangi bir alt dizinleri içine inerler. Herhangi bir nokta dosyasının toplamda sayılmasını istemiyorsanız, -A
parametreyi atlayın ls
.