Usiłuję oczyścić dysk twardy, na którym gromadzą się różnego rodzaju bzdury gromadzone przez lata. du
pomógł zmniejszyć zużycie dysku, ale całość nie jest często dziwnie nie ze względu na całkowity rozmiar, ale ze względu na całkowitą liczbę plików i katalogów ogółem.
Czy istnieje sposób, aby zrobić coś takiego, du
ale nie zliczać rozmiaru pliku, ale raczej liczbę plików i katalogów? Na przykład: plik ma wartość 1, a katalog to rekursywna liczba plików / katalogów w nim + 1.
Edycja: Powinienem był być bardziej jasny. Chciałbym nie tylko poznać całkowitą liczbę plików / katalogów /
, ale również /home
, /usr
etc, a ich podkatalogów rekurencyjnie, jak du
robi dla wielkości.
Odpowiedzi:
Uznałem, że jest
du --inodes
przydatny, ale nie jestem pewien, która wersjadu
tego wymaga. W systemie Ubuntu 17.10 działa:Połącz z,
| sort -nr
aby posortować malejąco według liczby i-węzłów zawierających.źródło
Wydaje się, że najłatwiejszym sposobem
find /path/to/search -ls | wc -l
Znajdź służy do przechodzenia przez wszystkie pliki i foldery.
-ls
wyświetlić (wydrukować) wszystkie nazwiska. Jest to ustawienie domyślne i jeśli go nie uwzględnisz, nadal będzie działać tak samo prawie we wszystkich systemach. (Prawie, ponieważ niektóre mogą mieć inne ustawienia domyślne). Dobrym nawykiem jest jednak jawne używanie tego.Jeśli tylko użyjesz tej
find /path/to/search -ls
części, wydrukuje ona wszystkie pliki i katalogi na ekranie.wc
to liczba słów.-l
opcja informuje go policzyć liczbę wierszy.Możesz go używać na kilka sposobów, np
Pierwsza opcja pozwala wc otworzyć plik i policzyć liczbę wierszy, słów i znaków w tym pliku. Druga opcja robi to samo, ale bez nazwy pliku czyta ze standardowego wejścia.
Możesz łączyć polecenia za pomocą potoku
|
. Dane wyjściowe z pierwszego polecenia będą przesyłane potokowo do danych wejściowych drugiego polecenia. Dlategofind /path/to/search -ls | wc -l
używa find do wyświetlenia wszystkich plików i katalogu i podaje dane wyjściowe do wc. Wc następnie zlicza liczbę linii.(Inną alternatywą byłoby `ls | wc ', ale find jest znacznie bardziej elastyczny i jest dobrym narzędziem do nauki.)
[Edytuj po komentarzu]
Przydatne może być połączenie find i exec.
Np. Wyświetli
find / -type d ! \( -path proc -o -path dev -o -path .snap \) -maxdepth 1 -exec echo starting a find to count to files in in {} \;
listę wszystkich katalogów w /, zablokuje niektóre, których nie chcesz przeszukiwać. Możemy wywołać poprzednie polecenie na każdym z nich, uzyskując sumę plików na folder w /.Jednak:
Będzie działał na Linuksie, ale nie tylko na każdym systemie uniksowym.
źródło
Poniższy skrypt PHP załatwia sprawę.
Umieść to w pliku (powiedz „
treesize
”),chmod +x
a następnie uruchom./treesize . | sort -rn | less
.źródło
du
liczy się po prostu zamiast sumowania rozmiaru, co jest dokładnie tym, jakie zadano w pierwotnym pytaniu.ncdu jest do tego świetny!
Na stronie podręcznika możesz wyświetlać liczby według katalogu i sortować według liczby:
Na przykład:
źródło
Wykorzystaj fakt, że katalogi i pliki są oddzielone
/
. Ten skrypt spełnia Twoje kryteria, ale służy do zainspirowania pełnego rozwiązania. Powinieneś także rozważyć zaindeksowanie plików za pomocą locate.>
>
źródło
Oto rozwiązanie wykorzystujące bash, zainspirowane postem z Unixa i Linuksa .
Jeśli są jakieś foldery, których szczegóły nie chcesz zobaczyć
.git
, możesz na przykład wykluczyć je z listygrep
.źródło