Znajdź liczbę plików w folderze i podfolderach?

142

Chcę znaleźć całkowitą liczbę plików w folderze i wszystkich jego podfolderach.

topless
źródło

Odpowiedzi:

223

Może być coś takiego

find . -type f | wc -l

załatwi sprawę. Spróbuj wykonać polecenie z folderu nadrzędnego.

sagarchalizować
źródło
3
Rozwiązanie zawiedzie w przypadku plików, których nazwy zawierają nowy wiersz.
użytkownik nieznany
2
@ użytkownik nieznany:find . -type f -ls | wc -l
umów się
1
jeszcze szybciej:find . -type f -print0 | tr -d -c '\0' | wc -c
umów się
13
@arrange: jeszcze szybciej: find . -type f -printf . | wc -c- Przyjmuję druk dla mojego rozwiązania zamiast echa -exec.
użytkownik nieznany
1
to polecenie działało w moim przypadku jak urok, wygląda jak czarna magia
pcko1
27

Użyj treepolecenia. Może być konieczne zainstalowanie treepakietu.

Spowoduje to wyświetlenie listy wszystkich plików i folderów w danym folderze oraz podsumowanie na końcu.

Egil
źródło
14

Aby policzyć pliki (nawet pliki bez rozszerzenia) w katalogu głównym bieżącego katalogu, użyj:

ls -l | grep ^- | wc -l

Aby policzyć pliki (nawet pliki bez rozszerzenia) rekurencyjnie z katalogu głównego bieżącego katalogu, użyj:

ls -lR | grep ^- | wc -l
użytkownik38537
źródło
1
Nie będą one liczyć ukrytych plików.
użytkownik nieznany
Prawdziwe. Jestem bardziej skłonny zaakceptować i wykorzystać twoją odpowiedź jako rozwiązanie.
user38537
13

Najszybszym i najłatwiejszym sposobem jest użycie tree. Jego prędkość jest ograniczona przez terminal wyjściowy, więc jeśli potokujesz wynik tail -1, otrzymasz natychmiastowy wynik. Możesz także kontrolować, na jakim poziomie katalogu lubisz wyniki, korzystając z -Lopcji. Aby uzyskać kolorowe wydruki, użyj -C. Na przykład:

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

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

Jeśli jeszcze go nie ma, możesz go pobrać tutaj .

not2qubit
źródło
9
find -type f -printf . | wc -c

Nie licz wyjściowych wierszy find, ponieważ nazwy plików zawierające 99 nowych wierszy będą liczone jako 100 plików.

nieznany użytkownik
źródło
4
Nazwy plików zawierające nowe linie to niezwykle rzadki przypadek na krawędzi.
DisgruntledGoat
8
@DisgruntledGoat: Tak więc bardzo trudno będzie znaleźć błąd.
użytkownik nieznany
Lubię dobrą skrzynkę, zwłaszcza wiele lat później.
user38537
3

Użyj tego polecenia dla każdego folderu na ścieżce

for D in *; do echo $D; find $D -type f| wc -l; done
Sriram Murali
źródło
1

find wydaje się być szybszy niż drzewo, więc użyłem poniżej, aby policzyć pliki w każdym katalogu bieżącego katalogu roboczego (ignorując pliki w CWD), umożliwiając katalogom spacje:

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

Mike Bounds
źródło
Analiza wyniku lsjest bardzo złym pomysłem.
souravc,
Świetny kod, jak mogę uporządkować wiersze wyjściowe w rosnącej lub malejącej liczbie plików
Nightcrawler
0

Możesz użyć find . | wc -l

find .wyświetli listę wszystkich plików i folderów oraz ich zawartość, zaczynając od bieżącego folderu.
wc -lliczy wyniki znalezienia

David
źródło
To rozwiązanie obejmuje również foldery, dałem znak, ponieważ pasowało do mojej okazji, że nie chciałem ich policzyć :)
topless
Rozwiązanie zawiedzie w przypadku plików, których nazwy zawierają nowy wiersz.
użytkownik nieznany
0

Sam wybrałbym tę opcję:

ls -alR | grep -c ^ -

Charles
źródło
3
Dodaj kilka szczegółów ...
Pierre.Vriens