Jak rekurencyjnie znaleźć ilość przechowywaną w katalogu?

136

Wiem, że możesz zobaczyć rozmiar bajtu pliku, gdy robisz długą listę z lllub ls -l. Ale chcę wiedzieć, ile miejsca jest w katalogu, w tym pliki w tym katalogu i znajdujące się w nim podkatalogi itp. Nie chcę liczby plików, ale ilość miejsca, które zajmują te pliki.

Więc chcę wiedzieć, ile miejsca jest w danym katalogu rekurencyjnie? Zgaduję, że jeśli istnieje polecenie, to byłoby w bajtach.

Rob Avery IV
źródło

Odpowiedzi:

146

Spróbuj to zrobić:

du -s dir

lub

du -sh dir

potrzebuje -hwsparcia, zależy od twojego systemu operacyjnego.

Widzieć

man du
Gilles Quenot
źródło
2
dodaj -bdo wyniku w bajtach
szt.
4
--all wyświetla wszystkie pliki i -h pokazuje rozmiar pliku w formacie czytelnym dla człowieka du -h --all
Praneeth
29

Po prostu robisz:

du -sh /path/to/directory

gdzie -sjest skrótem i czytelny-h dla człowieka ( opcja niestandardowa ).

Uważaj jednak, w przeciwieństwie do lstego, nie wyświetli to rozmiaru pliku, ale użycie dysku (tj. Wielokrotność wielkości bloku systemu plików), ale plik może być mniejszy lub nawet większy, więc możesz użyć --apparent-sizeopcji:

du -sh --apparent-size /path/to/directory

Jest to rozmiar, który byłby przesyłany przez sieć, gdybyś musiał.

Rzeczywiście, plik może mieć „dziury” (pustą powłokę), może być mniejszy niż rozmiar bloku systemu plików, może być skompresowany na poziomie systemu plików itp. Strona podręcznika wyjaśnia to.

Jak zauważa Nicklas , możesz także użyć analizatora użycia dysku. Uruchomiony z katalogu pokaże, które foldery i pliki zajmują miejsce na dysku, uporządkując je od największego do najmniejszego.ncdu

Możesz również zobaczyć to pytanie .

Totor
źródło
19

Zauważ, że jeśli chcesz znać rozmiar wszystkich folderów {sub} w katalogu, możesz również użyć opcji -dlub --max-depthopcji du(która przyjmuje argument: limit rekurencyjny)

Na przykład :

du -h /path/to/directory -d 1

Pokaże ci coś takiego

4.0K /path/to/directory/folder1
16M  /path/to/directory/folder2
2.4G /path/to/directory/folder3
68M  /path/to/directory/folder4
8G   /path/to/directory/folder5

PS: Wpisanie 0jako limit rekurencyjny jest równoważne -sopcji. Te 2 polecenia dadzą ci ten sam wynik (twój katalog rekurencyjny rozmiar czytelny dla człowieka):

du -h /path/to/directory -d 0
du -sh /path/to/directory
Flo Schild
źródło
-d 1musi znajdować się przed ścieżką katalogu
Abhinav Singi,
Wymagania? Działa dla mnie po ścieżce katalogu na Ubuntu / Debian. Zgadzam się
Flo Schild,
14

Alternatywą dla wspomnianego już dupolecenia byłby ncduładny analizator użycia dysku do użycia w terminalu. Być może trzeba go najpierw zainstalować, ale jest on dostępny w większości repozytoriów pakietów.

Edycja: Aby zapoznać się z formatem wyjściowym, zobacz zrzuty ekranu http://dev.yorhel.nl/ncdu/scr

Niklas
źródło
Cud! Dzięki temu mogę zobaczyć, które foldery przechowują dużą ilość miejsca na dysku. Znalazłem nawet wszystkie moje pliki, które w tajemniczy sposób zniknęły. To świetne narzędzie.
Faron,
11

Spowoduje to wyświetlenie listy rozmiarów z bieżącego katalogu, w tym folderów (rekurencyjnych) i plików.

$ du -hs *
7.5M    Applications
9.7M    Desktop
 85M    Documents
 16K    Downloads
 12G    Google Drive
 52G    Library
342M    Movies
8.3M    Music
780M    Pictures
8.5G    Projects
8.0K    Public
 16K    client1.txt
Simon Liu
źródło
3
na zamówienie według rozmiaru: du -hs * | sort -hs
Kaiser
3

W Uniksie katalog zawiera tylko nazwy i odniesienia do obiektów systemu plików (i-węzły, które mogą odnosić się do katalogów, plików lub innych egzotycznych rzeczy). Plik może pojawić się pod kilkoma nazwami w tym samym katalogu lub znajdować się w kilku katalogach. Tak więc „miejsce używane przez katalog i pliki w środku” naprawdę nie ma sensu, ponieważ pliki nie są „wewnątrz”.

To powiedziawszy, polecenie du(1)wyświetla przestrzeń zajmowaną przez katalog i wszystko, co jest przez niego osiągalne, du -sdaje podsumowanie, a -hniektóre implementacje, takie jak GNU, dudają wyjście „czytelne dla człowieka” (tj. Kilobajt, megabajt).

vonbrand
źródło
1

Dla mnie działało to wstecz w przypadku głębokości i ścieżki na OS X El Capitán

du -h -d 1 /path/to/directory
GZepeda
źródło
1

Możesz użyć „file-size.sh” z biblioteki awk Velor :

ls -ARgo "$@" | awk '{q += $3} END {print q}'
Steven Penny
źródło