Jak policzyć liczbę folderów na dysku w systemie Linux?

24

Muszę zorganizować zewnętrzny dysk twardy, aby nie było na nim więcej niż 500 folderów. Panel „Właściwości” Ubuntu pokazuje tylko liczbę plików, a nie liczbę folderów.

Czy istnieje prosta linia poleceń, która poda mi liczbę podkatalogów?

Muszę liczyć rekurencyjnie, a napęd to zewnętrzny dysk twardy zamontowany w /media/MUSIC/. To jest samochodowy zestaw stereo, którego dokumentacja mówi, że czyta tylko pierwsze 500 folderów.

Dean Rather
źródło

Odpowiedzi:

20

Przejdź do dysku i po prostu uruchom

ls -lR | grep ^d | wc -l
Aniket Thakur
źródło
Wydaje się, że podają one bardziej prawidłowy numer niż odpowiedź, którą zaakceptowałem 3 lata temu. Policzył katalog, w którym byłem, a tego nie zrobiłem.
Dean Raczej
Widzę też różne liczby, ale niezbyt różne.
SPRBRN
Osobiście wolę grep -cponad wc -l. Może to tylko ja.
Maxim_united
1
Powyższe zostanie przeliczone, jeśli jakikolwiek wpis katalogu zawiera sekwencję \nd(gdzie \njest znak NL).
Toby Speight
1
Toby ma rację, lsdane wyjściowe nie powinny być przesyłane strumieniowo . Co więcej, będzie to znacznie wolniejsze, ponieważ musi
wypisać
37

Znajdź wszystkie foldery łącznie, w tym podkatalogi?

find /mount/point -type d | wc -l

... lub znaleźć wszystkie foldery w katalogu głównym (bez podkatalogów)?

find /mount/point -maxdepth 1 -type d | wc -l
quack quixote
źródło
Ten pierwszy jest dokładnie tym, czego szukam. Dzięki!
Dean Raczej
@Dean: tak, już wcześniej używałem go do zliczania katalogów w mojej kolekcji muzycznej. :) dla praw braggin, policz swoje pliki MP3: find / mount / point -type f | grep -i mp3 | wc -l
quack quixote
1
@Dean: tak, nie znam od razu składni find , ale zwykle używam do tego grep -v : find / mount / pt -type f | grep -vi mp3 | grep -vi wav | wc -l ... (i <i> </i> nie działa w komentarzach, użyj *foo*kursywy: foo )
quack quixote
2
@Dean: Myślę, że po prostu użyjesz find /path -not -iname '*.mp3' | wc -ldo filtrowania plików MP3 lub do korzystania zarówno z plików MP3, jak i WAVfind /path -not -iname '*.mp3' -not -iname '*.wav' | wc -l
quack quixote
1
Musiałem dodać typ f , aby zignorował również foldery, ale gratulacje! Właśnie znalazłem całą masę plików m4a, o których nie miałem pojęcia ... Dzięki!
Dean Rather
4

Nowe wiersze są poprawnymi znakami w nazwach katalogów. Sugeruję, aby pozwolić findwydrukować pustą linię dla każdego znalezionego katalogu, a następnie pozwolić wcpoliczyć te linie.

find /mount/point -type d -printf '\n' | wc -l
Erik Sjölund
źródło
3

Spróbuj wykonać następujące czynności [patrz poniżej]:

ls -1 -p | grep "/" | wc -l

Spowoduje to wydrukowanie jednokolumnowej listy bieżącego katalogu z ukośnikami końcowymi dla elementów, które są podkatalogami, a następnie zliczenie linii z ukośnikami.

EDYCJA: prawdopodobnie powinieneś iść z odpowiedzią na quackote, ponieważ jest to trochę bardziej jednoznaczne, ale poprawiłem moje (po uwzględnieniu sugestii quacka).

ls -Rp | grep "/$" | wc -l
kaskader
źródło
Musisz dodać -R, aby przejść rekurencyjnie (przepraszam, że nie wspomniałem) i musisz podać ścieżkę do ls, ale tak, to działa: ls -1 -p -R / media / MUSIC / | grep "/" | wc -l Dzięki!
Dean Rather
Po wypróbowaniu zarówno tej sugestii, jak i quackote, otrzymałem 2 różne wyniki ... Jestem skłonny uwierzyć drugiemu. W każdym razie dzięki!
Dean Raczej
1
nie potrzebujesz, -1ponieważ ls wykryje potok i nie sformatuje kolumn. możesz również pobierać rekursywne zestawienia -R, ale wtedy prawdopodobnie chcesz grep, "/$"aby dopasować tylko końcowe ukośniki (lub liczenie zostanie wyłączone). wersja ostateczna:ls -Rp | grep "/$" | wc -l
quack quixote
1
znalezisko wersja napisałem będzie liczyć .(tj /mount/point) w liczbie, z ls wersję w moim komentarzu powyżej nie będzie. liczby te różnią się o 1, które można użyć /mount/point/*w poleceniu find, aby to poprawić (zakładając, że nie ma ukrytych katalogów kropek).
quack quixote
nie jestem pewien, dlaczego otrzymałeś dwa różne wyniki, ale metoda @ quack będzie obejmować „ukryte” katalogi (tj. te, które zaczynają się na „.”).
Stuntmouse,
1

Napisałem ffcnt, aby przyspieszyć liczenie plików rekurencyjnych w określonych okolicznościach: dyski obrotowe i systemy plików, które obsługują mapowanie zasięgu.

Może być o rząd wielkości szybszy niż lslub findpodejście oparte

the8472
źródło
1

Gdy istnieje duża liczba katalogów, takie narzędzia treemogą zakończyć się wiecznością, a nawet zawiesić, więc możesz chcieć użyć czegoś bardziej wydajnego.

Najbardziej skutecznym sposobem na policzenie katalogów, o którym myślę, jest następująca, ponieważ findwydrukuje tylko jeden .dla każdego znalezionego folderu zamiast pełnej ścieżki i nazwy pliku i wcmusi tylko iterować liczbę znaków:

find /mount/point -type d -printf '.' |wc -c

Aby wykluczyć /mount/pointsię z obliczeń i policzyć tylko podkatalogi:

find /mount/point -mindepth 1 -type d -printf '.' |wc -c
David
źródło
1

Uznałem, że jest du --inodesprzydatny, ale nie jestem pewien, która wersja dutego wymaga. W systemie Ubuntu 17.10 działa:

du --inodes      # all files and subdirectories
du --inodes -s   # summary
du --inodes -d 2 # depth 2 at most

Połącz z, | sort -nraby posortować malejąco według liczby zawierających i-węzłów.

krlmlr
źródło
0

Lubię używać drzewa do pobierania liczby katalogów

tree -d -R -fi --noreport | wc -l

Lub źle używam find, aby pokazać, że większość folderów znajduje się w folderze

find . -type d -printf "%h\n" | cut -d/ -f-2 | sort | uniq -c | sort -rn
Cameron L.
źródło
Lub coś w rodzaju: drzewo | grep -e '^. * katalogi,'
mindcrime
-2

Aby znaleźć liczbę folderów i katalogu w bieżącym katalogu

Wpisz następujące polecenie w swoim terminalu

echo */ | wc
ASHISH RANJAN
źródło