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.