Linux kullanan bir sürücüdeki klasör sayısını nasıl sayabilirim?


24

Harici bir HDD'yi, üzerinde 500'den fazla klasör olmayacak şekilde düzenlemem gerekiyor. Ubuntu'nun "Özellikler" bölmesi klasör sayısını değil yalnızca dosya sayısını gösterir.

Bana alt dizin sayısını söyleyecek basit bir komut satırı var mı?

Özyinelemeli saymaya ihtiyacım var ve sürücü monte edilmiş bir harici HDD /media/MUSIC/. Belgeleri sadece ilk 500 klasörü okuduğunu söyleyen bir araç stereo sistemi için.

Yanıtlar:


20

Sürücünüze gidin ve basitçe çalıştırın

ls -lR | grep ^d | wc -l

Bu, 3 yıl önce kabul ettiğim yanıttan daha doğru bir rakam sağlıyor gibi görünüyor. İçinde bulunduğum dizini saydı, oysa bu yapılmadı.
Dean Rather

Ben de farklı sayılar görüyorum ama çok da farklı değil.
SPRBRN

Şahsen ben tercih grep -cüzerinde wc -l. Belki de sadece benim.
Maxim_united

1
Herhangi bir dizin girişi, diziyi içeriyorsa, yukarıdakiler aşılacaktır \nd( \nNL karakteri nerede ).
Toby Speight

1
Toby haklı, lsçıktının borulanması gerekmiyor . Üstelik bu daha yavaş olacaktır çünkü tüm ağacı
çıkarması

37

Alt klasörler dahil toplamda tüm klasörleri bul?

find /mount/point -type d | wc -l

... ya da kök dizindeki tüm klasörleri bul (alt dizinler hariç)?

find /mount/point -maxdepth 1 -type d | wc -l

Bu ilki tam olarak peşinde olduğum şey. Teşekkürler!
Dean

@Dean: evet, daha önce müzik koleksiyonumdaki dizinleri saymak için de kullandım. :) palavra hakları için MP3'lerinizi sayın: find / mount / point -type f | grep -i mp3 | wc -l
quack quixote

1
@Dean: evet, el yazısı bulma sözdizimini bilmiyorum ama genellikle bunun için grep -v kullanırım : find / mount / pt -type f | grep -vi mp3 | grep -vi wav | wc -l ... (ve <i> </i> yorumlarda çalışmaz, *foo*italikleştirmek için kullanın : foo )
quix quixote

2
@Dean: i sadece kullanmak düşünüyorum find /path -not -iname '*.mp3' | wc -lfiltre MP3 mı yoksa hem MP3 ve WAV kullanımını olsunfind /path -not -iname '*.mp3' -not -iname '*.wav' | wc -l
vak quixote

1
Klasörleri de görmezden gelebilmek için -type f eklenmesi gerekiyor, ancak tebrikler! Sadece bilmediğim bir sürü m4a dosyası buldum ... Teşekkürler!
Dean Rather

4

Yeni satırlar, dizin adlarındaki geçerli karakterlerdir. findBulunan her dizin için boş bir satır yazdırmayı ve sonra da wcbu satırları saymanızı öneririz .

find /mount/point -type d -printf '\n' | wc -l

3

Aşağıdakini deneyin [aşağıya bakın]:

ls -1 -p | grep "/" | wc -l

Bu, geçerli dizinin bir sütun listesini yazdırır, alt dizinli öğeler için sondaki eğik çizgiler, ardından eğik çizgileri olan satırları sayar.

EDIT: muhtemelen biraz daha açık olduğu için quack quixote'un cevabını kullanmalısın, ama benimkini düzelttim (quack'in önerilerini dikkate aldıktan sonra).

ls -Rp | grep "/$" | wc -l

Özyinelemeli gitmek için -R eklemeniz gerekir (söylemediğim için üzgünüm) ve ls yolunu belirtmeniz gerekir, ancak evet, bu işe yarar: ls -1 -p -R / media / MUSIC / | grep "/" | wc -l teşekkürler!
Dean

Hem bunu hem de quixote önerisini sorguladıktan sonra, 2 farklı sonuç aldım ... diğerine inanmaya meyilliyim. Yine de teşekkürler!
Dean

1
İhtiyacınız yok -1çünkü ls boruyu algılar ve sütunları biçimlendirmez. Ayrıca yinelenen listeleri alamazsınız -R, ancak o zaman muhtemelen "/$"sadece sondaki eğik çizgileri eşleştirmek için grep yapmak istersiniz (ya da sayım kapanır). son sürüm:ls -Rp | grep "/$" | wc -l
quack quixote

1
bulmak i yayınlanmıştır versiyonu sayacaktır .(yani /mount/point, onun sayısında) ls benim yukarıdaki yorumunda sürümünü olmaz. bu sayımlar 1 ile farklılık gösterir, bunu bulmak/mount/point/* için find komutunda kullanabilirsiniz (gizli nokta dizinleri varsayılmazsa).
quack quixote

İki farklı sonucu niçin aldığınızdan emin değilim, ancak @ quack'in yöntemi "gizli" dizinleri içerecektir (yani, '.' ile başlayanlar).
stuntmouse

1

Belirli koşullar altında özyinelemeli dosya sayımını hızlandırmak için ffcnt yazdım : dönme diskleri ve kapsam haritalamasını destekleyen dosya sistemleri.

Temel yaklaşımlardan daha hızlı lsveya daha büyük bir emir olabilir.find


1

Çok sayıda dizin olduğunda, araçlar treebitmek ya da asmak için sonsuza dek sürebilir, böylece daha verimli bir şeyler kullanmak isteyebilirsiniz.

Aklıma gelen dizinleri saymanın en etkili yolu şudur: çünkü tam yol ve dosya adı yerine bulunan her klasör için findyalnızca bir tane basar .ve wcyalnızca karakter sayısı üzerinde yinelemeye ihtiyaç duyar:

find /mount/point -type d -printf '.' |wc -c

/mount/pointKendisini hesaplamadan çıkarmak ve yalnızca alt dizinleri saymak için:

find /mount/point -mindepth 1 -type d -printf '.' |wc -c

1

du --inodesYararlı buldum , ancak hangi sürümünün dugerekli olduğundan emin değilim . Ubuntu 17.10'da aşağıdakiler çalışır:

du --inodes      # all files and subdirectories
du --inodes -s   # summary
du --inodes -d 2 # depth 2 at most

| sort -nrAzalan inode sayısına göre azalan sıralamak için ile birleştirin .


0

Dizin sayısını çekmek için ağaç kullanmayı severim

tree -d -R -fi --noreport | wc -l

Veya, kullanımda bulunan klasörlerin toplu olduğunu göstermek için bulma

find . -type d -printf "%h\n" | cut -d/ -f-2 | sort | uniq -c | sort -rn

Veya benzeri bir şey: ağaç | grep -e '^. * dizinler,'
mindcrime

-2

Geçerli dizindeki klasör ve dizini bulmak için

Terminalinize aşağıdaki komutu yazın

echo */ | wc
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.