Klasördeki ve alt klasörlerdeki dosya sayısını bulmak?


143

Bir klasör altındaki dosyaların ve tüm alt klasörlerin toplam sayısını bulmak istiyorum.

Yanıtlar:


224

Gibi bir şey olabilir

find . -type f | wc -l

hile yapardı. Komutu ana klasörden deneyin.


3
Çözüm, adların yeni satır içeren dosyalarda başarısız olur.
kullanıcı bilinmeyen

2
@user unknown:find . -type f -ls | wc -l
düzenleme

1
daha da hızlı:find . -type f -print0 | tr -d -c '\0' | wc -c
düzenleme

13
@garrange: daha da hızlı: find . -type f -printf . | wc -c- Çözümüm için -exec echo yerine baskıyı benimsiyorum.
kullanıcı bilinmeyen

1
Bu komut benim durumumda bir cazibe gibi çalıştı, kara büyü gibi görünüyor
pcko1 5:18

27

treeKomutu kullan . treePaketi yüklemeniz gerekebilir .

Verilen klasör altındaki tüm dosya ve klasörleri listeler ve sonunda bir özet listeler.


14

Geçerli dizinin kökündeki dosyaları (uzantısı olmayan dosyalar bile) saymak için şunu kullanın:

ls -l | grep ^- | wc -l

Dosyaları (uzantısı olmayan dosyalar bile) geçerli dizinin kökünden yinelemeli olarak saymak için , şunu kullanın:

ls -lR | grep ^- | wc -l

1
Bunlar gizli dosyaları saymaz.
kullanıcı bilinmeyen

Doğru. Cevabınızı çözüm olarak kabul etmeye ve kullanmaya daha meyilliyim.
user38537

13

En hızlı ve en kolay yol kullanmaktır tree. Hızı çıkış terminalinizle sınırlıdır, bu nedenle sonucu tail -1düşürürseniz hemen sonuç alırsınız. Ayrıca, -Lseçeneği kullanarak sonuçları hangi dizin seviyesinden sevdiğinizi kontrol edebilirsiniz . Renklendirilmiş çıktılar için kullanın -C. Örneğin:

$ tree share/some/directory/ | tail -1
558 directories, 853 files

$ tree -L 2 share/some/directory/ | tail -1
120 directories, 3 files

Zaten orada değilse, bunu elde edebilirsiniz burada .


9
find -type f -printf . | wc -c

Bulun çıktı satırlarını saymayın, çünkü 99 yeni satır içeren dosya adları 100 dosya olarak sayılır.


4
Yeni satırlar içeren dosya isimleri inanılmaz derecede nadir görülen bir durumdur.
DisgruntledGoat

8
@DisgruntledGoat: Yani bir hatayı bulmak çok zor olacak.
kullanıcı bilinmeyen

Özellikle uzun yıllar sonra iyi bir durumdan hoşlanıyorum.
user38537

3

Yoldaki her klasör için bu komutu kullanın

for D in *; do echo $D; find $D -type f| wc -l; done

1

Bulmak ağaçtan daha hızlı görünüyor, bu nedenle mevcut çalışma dizininin her bir dizinindeki (CWD'deki dosyaları yok sayarak) her bir dizindeki dosyaları saymak için dizinleri boşluk bırakarak ayırmak için kullandım:

ls -d */ | while read dir_line do echo -n "$dir_line :" find "$dir_line" -type f | wc -l done


Arasında ayrıştırma çıkış lsolduğunu çok kötü bir fikir.
souravc

Harika kod, çıktı satırlarını artan veya azalan dosya sayısında nasıl düzenleyebilirim
nightcrawler

0

Kullanabilirsiniz find . | wc -l

find .Geçerli klasörünüzde başlayan tüm dosya ve klasörleri ve içeriğini listeler.
wc -lBulma sonuçlarını sayar


Ben :) bunları saymak istemiyordu benim fırsat eşleşti neden de bu çözüm sayımları klasörler, ben işareti verdi
üstsüz

Çözüm, adların yeni satır içeren dosyalarda başarısız olur.
kullanıcı bilinmeyen

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.