Możliwa duplikat:
Jak policzyć liczbę folderów na dysku w systemie Linux?
Mam naprawdę głębokie drzewo katalogów na moim Linux-ie. Chciałbym policzyć wszystkie pliki w tej ścieżce, w tym wszystkie podkatalogi.
Na przykład, biorąc pod uwagę to drzewo katalogów:
/home/blue
/home/red
/home/dir/green
/home/dir/yellow
/home/otherDir/
Jeśli przejdę /home
, chciałbym, aby zwrócił cztery pliki. Lub punkty bonusowe, jeśli zwróci cztery pliki i dwa katalogi. Zasadniczo chcę odpowiednik kliknięcia folderu prawym przyciskiem myszy w systemie Windows i wybrania właściwości i sprawdzenia, ile plików / folderów znajduje się w tym folderze.
Jak najłatwiej to zrobić? Mam rozwiązanie obejmujące napisany skrypt w języku Python, ale dlaczego nie jest to tak proste, jak uruchomienie ls | wc
lub podobne?
linux
command-line
omghai2u
źródło
źródło
locate
baza danych jest na bieżąco:locate /some/path | wc -l
(lub na komputerze Mac:locate -c /some/path
). Ale: spowoduje to również policzenie plików/this/other/path/with/some/path
i same foldery.Odpowiedzi:
find . -type f | wc -l
Objaśnienie:
find . -type f
odnajduje wszystkie pliki ( -type f ) w tym katalogu ( . ) I we wszystkich podkatalogach, nazwy plików są następnie drukowane w standardzie po jednym w wierszu.To jest następnie rurami | w
wc
(liczba słów)-l
opcja mówi wc, aby zliczała tylko wiersze swojego wejścia.Razem liczą wszystkie twoje pliki.
źródło
find
wyjścia1
Powyższe odpowiedzi już odpowiadają na pytanie, ale dodam, że jeśli użyjesz funkcji znajdź bez argumentów (z wyjątkiem folderu, w którym chcesz przeprowadzić wyszukiwanie), jak w:
wyszukiwanie przebiega znacznie szybciej, prawie natychmiast, a przynajmniej dla mnie. Wynika to z faktu, że klauzula typu musi uruchamiać wywołanie systemowe stat () dla każdej nazwy, aby sprawdzić jej typ - pominięcie jej pozwala temu zapobiec.
Różnica polega na zwróceniu liczby plików plus folderów zamiast samych plików, ale przynajmniej dla mnie to wystarczy, ponieważ najczęściej używam tego, aby znaleźć, które foldery mają ogromną liczbę plików, które trwają wiecznie, aby je skopiować i skompresować. Liczenie folderów wciąż pozwala mi znaleźć foldery z większością plików, potrzebuję więcej prędkości niż precyzji.
źródło
1
Dla plików:
W przypadku katalogów:
Oba działają w bieżącym katalogu roboczym.
źródło
1
Z bash 4+
Nie musisz dzwonić dwukrotnie, jeśli chcesz wyszukać pliki i katalogi
źródło
Nieznaczna aktualizacja przyjętej odpowiedzi, jeśli chcesz liczbę reż
źródło
find $DIR -exec stat -f '%HT' {} \; | sort | uniq -c | sort -rn
(Tutaj typ%T
jest pusty dla zwykłego pliku, gwiazdka dla pliku wykonywalnego lub ukośnik dla folderu; dlatego%HT
jest potrzebny lub dodatkowy tekst, aby uniknąć policzenia miejsca, jak> %T
. )