Wyświetlić każdy rozmiar podkatalogu w formacie listy za pomocą jednego wiersza polecenia w Bash?

100

Chcę uzyskać listę katalogów i ich rozmiarów w formacie listy, takim jak sposób uzyskiwania, gdy robisz ls -l.

Chodzi o to, że istnieje jedno wierszowe polecenie, które może to zrobić? Widzę, że inni mają długie polecenia tylko po to, by to wyprowadzić. To po prostu za długo.

Jakie polecenie może to zrobić lub kombinację poleceń, które można łatwo wpisać? du -hdaje, ale wyświetla wszystkie podfoldery, co nie jest tym, czego chcę. tylko bieżące foldery katalogów.

Patoshi パ ト シ
źródło

Odpowiedzi:

71

Prawdopodobnie chcesz zobaczyć katalogi uporządkowane według rozmiaru:

$ du -hs * | sort -hr

856M    lib
746M    share
612M    lib64
312M    src
267M    java
239M    bin
179M    sbin
173M    local
93M     i686-w64-mingw32
72M     libexec
26M     include
20M     puppet
772K    X11R6
20K     man
4.0K    games
4.0K    etc
0       tmp
raychi
źródło
To nie działa, jeśli w katalogu jest duża liczba wpisów. bash: /run/current-system/sw/bin/du: Argument list too long
Chris Stryczyński
123

Spróbuj tego

du -h --max-depth=1

Wynik

oliver@home:/usr$ sudo du -h --max-depth=1
24M     ./include
20M     ./sbin
228M    ./local
4.0K    ./src
520M    ./lib
8.0K    ./games
1.3G    ./share
255M    ./bin
2.4G    .

Alternatywny

Jeśli --max-depth=1twój gust jest nieco za długi, możesz także spróbować użyć:

du -h -s *

Używa -s( --summarize) i domyślnie drukuje tylko rozmiar samego folderu. Przekazując wszystkie elementy w bieżącym katalogu roboczym ( *), generuje podobne dane wyjściowe --max-depth=1:

Wynik

oliver@cloud:/usr$ sudo du -h -s *
255M    bin
8.0K    games
24M     include
520M    lib
0       lib64
228M    local
20M     sbin
1.3G    share
4.0K    src

Różnica jest subtelna. Poprzednie podejście wyświetla całkowity rozmiar bieżącego katalogu roboczego i całkowity rozmiar wszystkich zawartych w nim folderów ... ale tylko do głębokości 1.

To drugie podejście obliczy całkowity rozmiar wszystkich przekazanych elementów indywidualnie . Tak więc zawiera dowiązanie symboliczne lib64na wyjściu, ale wyklucza ukryte elementy (których nazwa zaczyna się od kropki). Brakuje również całkowitego rozmiaru bieżącego katalogu roboczego, ponieważ nie został on przekazany jako argument.

Der Hochstapler
źródło
4
Idealna odpowiedź. W systemie Mac OSX --depthparametr nie jest rozpoznawany. Użyj du -h -d 1dla tego samego rezultatu.
Dylan
6

Wydrukuj rozmiary wszystkich folderów plików i ukrytych plików na dysku:

el@dev /home/el $ du -sh `ls -a`
258M    .
265M    ..
4.0K    .classpath
258M    .git
4.0K    .gitignore
9.0K    nbactions.xml
12K     README
20K     .README.swp
4.0K    run.sh
23K    XmlPostPropagate.php
Eric Leschinski
źródło
2
Ale strzeż się! Dlaczego nie powinieneś analizować wyniku ls (1)
Kamil Maciorowski
2

Warto wspomnieć o poleceniu powłoki Użycie dysku NCurses .

Ncdu to analizator użycia dysku z interfejsem ncurses. Jest przeznaczony do znajdowania kosmicznych świń na zdalnym serwerze, na którym nie masz dostępnej całej konfiguracji graficznej, ale jest to przydatne narzędzie nawet w zwykłych systemach komputerowych. Ncdu ma być szybki, prosty i łatwy w użyciu i powinien być w stanie działać w każdym minimalnym środowisku podobnym do POSIX z zainstalowanymi ncurses.

Promień
źródło