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


142

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

Odpowiedzi:


223

Może być coś takiego

find . -type f | wc -l

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


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.


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

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 .


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.


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

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


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


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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.