Chcę zobaczyć, ile plików znajduje się w podkatalogach, aby dowiedzieć się, gdzie jest całe użycie i-węzła w systemie. Jakbym zrobił to dla wykorzystania przestrzeni
du -sh /*
co da mi miejsce używane w katalogach poza katalogiem głównym, ale w tym przypadku chcę liczbę plików, a nie ich rozmiar.
disk-usage
recursive
inode
ksenoterracid
źródło
źródło
du -sh /*
wyjaśnił, jak chciałem, żeby hrabia działał. to samo, po prostu policz pliki, a nie bajty.Odpowiedzi:
Podziękowania dla Gilles i ksenoterrakidu za poprawki dotyczące bezpieczeństwa / zgodności.
Pierwsza część:
find -maxdepth 1 -type d
zwróci listę wszystkich katalogów w bieżącym katalogu roboczym. To jest przesyłane do ...Druga część:
while read -r dir; do
rozpoczyna pętlę while - tak długo, jak długo potok wchodzący do while jest otwarty (czyli do momentu wysłania całej listy katalogów), polecenie odczytu umieści następny wiersz w zmiennej „dir”. Następnie kontynuuje ...Trzecia część:
printf "%s:\t" "$dir";
wypisze ciąg znaków w „$ dir” (który zawiera jedną z nazw katalogów), a następnie tabulator.Czwarta część:
find "$dir -f file"
tworzy listę wszystkich plików w nazwie katalogu przechowywanych w „$ dir”. Ta lista jest wysyłana do ..Piąta część:
wc -l;
zlicza liczbę wierszy wysłanych na standardowe wejście.Ostatnia część:
done
po prostu kończy pętlę while.Otrzymujemy więc listę wszystkich katalogów w bieżącym katalogu. Dla każdego z tych katalogów generujemy listę wszystkich plików w nim, abyśmy mogli je wszystkie policzyć
wc -l
. Wynik będzie wyglądał następująco:źródło
read -r
jako zwykłychread
trików specjalnie dla ukośników. Wtedyecho -en "$dir:\t"
znów zacznie mangować ukośniki odwrotne;printf '%s:\t' "$dir"
zamiast tego należy użyć prostej poprawki . Następnie$dir
powinno być"$dir"
( zawsze używaj podwójnych cudzysłowów wokół podstawień zmiennych ).find -maxdepth 1 -type d | while read -r dir; do printf "%s:\t" "$dir"; find "$dir" | wc -l; done
sort -n -r -k2
do końca to, dla wielu katalogów, tak, że wiem, gdzie jest najbardziej Wykorzystanie-type f
aby zrobić listę plików:find -maxdepth 1 -type d | while read -r dir; do printf "%s:\t" "$dir"; find "$dir" -type f | wc -l; done
Spróbuj
find . -type f | wc -l
, policzy wszystkie pliki w bieżącym katalogu, a także wszystkie pliki w podkatalogach. Pamiętaj, że wszystkie katalogi nie będą liczone jako pliki, tylko zwykłe pliki.źródło
Oto kompilacja kilku przydatnych poleceń list (ponownie zakodowanych na podstawie kodu poprzednich użytkowników):
Lista folderów z liczbą plików:
Lista folderów z niezerową liczbą plików:
Lista folderów z liczbą podfolderów:
Lista folderów z niezerową liczbą podfolderów:
Wyświetl puste foldery:
Wyświetl niepuste foldery z liczbą treści:
źródło
Próbować:
jako punkt początkowy lub jeśli naprawdę chcesz rekursować tylko przez podkatalogi katalogu (i pomiń pliki w tym katalogu najwyższego poziomu)
źródło
find
domyślnie działa rekurencyjnie we wszystkich podkatalogach. Jeśli chcesz, aby działał w wielu lokalizacjach, możesz określić wszystkie międzyfind
i-type
.698035
. Powinienem zobaczyć około 6 liczb./home
? Byłbym w 100% pewien, że nie.Poniższe rozwiązanie liczy rzeczywistą liczbę używanych i-węzłów, zaczynając od bieżącego katalogu:
Aby uzyskać liczbę plików tego samego podzbioru, użyj:
W przypadku rozwiązań eksplorujących tylko podkatalogi, bez uwzględnienia plików w bieżącym katalogu, możesz odnieść się do innych odpowiedzi.
źródło
find -printf '%i\n' | sort -u | wc -l
. Jeśli chcesz być przenośny, potrzebujeszfind . -exec ls -id {} + | cut …
zamiast tego.OS X 10.6 dusi polecenie w zaakceptowanej odpowiedzi, ponieważ nie określa ścieżki dla
find
. Zamiast tego użyj:źródło
Wiem, że jestem spóźniony na imprezę, ale wierzę, że to czyste
bash
(lub inna powłoka, która akceptuje podwójną gwiazdę globu) może być znacznie szybsze w niektórych sytuacjach:wynik:
źródło
Wypróbuj to:
Powinno działać dobrze, chyba że nazwy plików zawierają znaki nowej linii.
źródło
-maxdepth 1
natychmiast po pierwszymfind
. Jeśli chcesz uwzględnić liczbę podkatalogów w swoim liczniku, usuń je-type f
na końcu (i tak powinno być naprawdę! -type d
, aby wszystkie pliki inne niż katalogi zostały uwzględnione).Jeśli masz
ncdu
zainstalowany (niezbędny, gdy chcesz zrobić porządki), po prostu wpiszc
„Przełącz wyświetlanie liczby elementów podrzędnych”. IC
„Sortuj według przedmiotów”.źródło
du --inodes
Nie jestem pewien, dlaczego nikt (w tym ja) nie był świadomy:
Jestem prawie pewien, że to rozwiązuje problem PO. Zacząłem z niego często korzystać, aby dowiedzieć się, gdzie są wszystkie śmieci na moich ogromnych dyskach (i przenieść je na starszy dysk).
Dalsze informacje
Jeśli nie chcesz się powtarzać (co może być przydatne w innych sytuacjach), dodaj
źródło