Używanie ls do wyświetlania katalogów i ich całkowitych rozmiarów

Czy jest możliwe użycie ls w Uniksie do wyświetlenia całkowitej wielkości podkatalogu i całej jego Zawartości w przeciwieństwie do zwykłego pliku 4K, który (zakładam) jest tylko plikiem katalogu? I. E.

total 12K
drwxrwxr-x  6 *** *** 4.0K 2009-06-19 10:10 branches
drwxrwxr-x 13 *** *** 4.0K 2009-06-19 10:52 tags
drwxrwxr-x 16 *** *** 4.0K 2009-06-19 10:02 trunk

Po przeszukaniu stron podręcznika pojawiam się pusta.

 640
Author: Boden, 2009-06-19

22 answers

Spróbuj czegoś takiego:

du -sh *

Skrócona wersja:

du --summary --human-readable *

Wyjaśnienie:

du: D isk U sage

-s: wyświetla podsumowanie dla każdego określonego pliku. (Odpowiednik -d 0)

-h: "czytelny dla człowieka". Użyj przyrostków jednostkowych: B yte, K ibibyte (KiB), Mebibyte (MiB), Gibibyte (GiB), Tebibyte (TiB) i P ebibyte (PiB). (BASE2)

 1195
Author: molf,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-17 13:42:25

du -sk * | sort -n posortuje foldery według rozmiaru. Pomocny przy poszukiwaniu miejsca..

 261
Author: GraveDigger,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-09 09:08:11
du -sh * | sort -h

Zostanie to wyświetlone w formacie czytelnym dla człowieka.

 81
Author: user2969885,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-09 06:33:04

Aby wyświetlić listę największych katalogów z bieżącego katalogu w formacie czytelnym dla człowieka:

du -sh * | sort -hr

Lepszym sposobem na ograniczenie liczby wierszy może być

du -sh * | sort -hr | head -n10

Gdzie można zwiększyć przyrostek flagi -n, aby ograniczyć liczbę wierszy na liście

Próbka:

[~]$ du -sh * | sort -hr
48M app
11M lib
6.7M    Vendor
1.1M    composer.phar
488K    phpcs.phar
488K    phpcbf.phar
72K doc
16K nbproject
8.0K    composer.lock
4.0K    README.md

To sprawia, że wygodniej się czyta :)

 25
Author: Jay Chakra,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-01 10:42:18

Aby wyświetlić go w formacie ls -lh, Użyj:

(du -sh ./*; ls -lh --color=no) | awk '{ if($1 == "total") {X = 1} else if (!X) {SIZES[$2] = $1} else { sub($5 "[ ]*", sprintf("%-7s ", SIZES["./" $9]), $0); print $0} }'

Kod Awk objaśniony:

if($1 == "total") { // Set X when start of ls is detected
  X = 1 
} else if (!X) { // Until X is set, collect the sizes from `du`
  SIZES[$2] = $1
} else {
  // Replace the size on current current line (with alignment)
  sub($5 "[ ]*", sprintf("%-7s ", SIZES["./" $9]), $0); 
  print $0
}

Przykładowe wyjście:

drwxr-xr-x 2 root     root 4.0K    Feb 12 16:43 cgi-bin
drwxrws--- 6 root     www  20M     Feb 18 11:07 document_root
drwxr-xr-x 3 root     root 1.3M    Feb 18 00:18 icons
drwxrwsr-x 2 localusr www  8.0K    Dec 27 01:23 passwd
 21
Author: Sebi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-24 22:42:32

Żądaną komendą jest 'du-sk' du = "użycie dysku"

Flaga-k podaje dane wyjściowe w kilobajtach, zamiast domyślnych sektorów dysków (512-bajtowych bloków).

Flaga-s wyświetli tylko listę rzeczy w katalogu najwyższego poziomu (tj. domyślnie bieżący katalog lub katalog podany w wierszu poleceń). To dziwne, że du ma w tym względzie odwrotne zachowanie niż ls. Domyślnie du poda rekurencyjnie użycie dysku każdego podkatalogu. In contrast, ls poda tylko pliki list w podanym katalogu. (ls-R daje zachowanie rekurencyjne.)

 20
Author: Keith Smith,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-22 21:29:17

Umieść tę deklarację funkcji powłoki w skryptach inicjalizacyjnych powłoki:

function duls {
    paste <( du -hs -- "$@" | cut -f1 ) <( ls -ld -- "$@" )
}

Nazwałem go duls, ponieważ pokazuje wyjście zarówno du, jak i ls (w tej kolejności):

$ duls
210M    drwxr-xr-x  21 kk  staff  714 Jun 15 09:32 .

$ duls *
 36K    -rw-r--r--   1 kk  staff    35147 Jun  9 16:03 COPYING
8.0K    -rw-r--r--   1 kk  staff     6962 Jun  9 16:03 INSTALL
 28K    -rw-r--r--   1 kk  staff    24816 Jun 10 13:26 Makefile
4.0K    -rw-r--r--   1 kk  staff       75 Jun  9 16:03 Makefile.am
 24K    -rw-r--r--   1 kk  staff    24473 Jun 10 13:26 Makefile.in
4.0K    -rw-r--r--   1 kk  staff     1689 Jun  9 16:03 README
120K    -rw-r--r--   1 kk  staff   121585 Jun 10 13:26 aclocal.m4
684K    drwxr-xr-x   7 kk  staff      238 Jun 10 13:26 autom4te.cache
128K    drwxr-xr-x   8 kk  staff      272 Jun  9 16:03 build
 60K    -rw-r--r--   1 kk  staff    60083 Jun 10 13:26 config.log
 36K    -rwxr-xr-x   1 kk  staff    34716 Jun 10 13:26 config.status
264K    -rwxr-xr-x   1 kk  staff   266637 Jun 10 13:26 configure
8.0K    -rw-r--r--   1 kk  staff     4280 Jun 10 13:25 configure.ac
7.0M    drwxr-xr-x   8 kk  staff      272 Jun 10 13:26 doc
2.3M    drwxr-xr-x  28 kk  staff      952 Jun 10 13:26 examples
6.2M    -rw-r--r--   1 kk  staff  6505797 Jun 15 09:32 mrbayes-3.2.7-dev.tar.gz
 11M    drwxr-xr-x  42 kk  staff     1428 Jun 10 13:26 src

$ duls doc
7.0M    drwxr-xr-x  8 kk  staff  272 Jun 10 13:26 doc

$ duls [bM]*
 28K    -rw-r--r--  1 kk  staff  24816 Jun 10 13:26 Makefile
4.0K    -rw-r--r--  1 kk  staff     75 Jun  9 16:03 Makefile.am
 24K    -rw-r--r--  1 kk  staff  24473 Jun 10 13:26 Makefile.in
128K    drwxr-xr-x  8 kk  staff    272 Jun  9 16:03 build

Wyjaśnienie:

Narzędzie paste tworzy kolumny ze swojego wejścia zgodnie z podaną specyfikacją. Biorąc pod uwagę dwa pliki wejściowe, umieszcza je obok siebie, z tabulatorem jako separatorem.

Dajemy mu wyjście du -hs -- "$@" | cut -f1 jako pierwszy plik (strumień wejściowy) i wyjście ls -ld -- "$@" jako drugi plik.

W funkcji, "$@" będzie oceniać Do Listy wszystkich argumentów linii poleceń, każdy w podwójnych cudzysłowach. Będzie więc rozumiał globulujące znaki i nazwy ścieżek ze spacjami itp.

Podwójne minusy (--) sygnalizują koniec opcji linii poleceń na du i ls. Bez nich powiedzenie duls -l myliłoby du, a każda opcja dla du, której nie ma ls, myliłaby ls (i opcje, które istnieją w obu narzędzia mogą nie oznaczać tego samego, a to byłby niezły bałagan).

cut po du po prostu wycina pierwszą kolumnę wyjścia du -hs (rozmiary).

Postanowiłem umieścić wyjście du po lewej stronie, w przeciwnym razie musiałbym zarządzać chwiejną prawą kolumną (ze względu na różne długości nazw plików).

Polecenie nie akceptuje znaczników linii poleceń.

To zostało przetestowane zarówno w bash, jak i w ksh93. Nie będzie działać z /bin/sh.
 7
Author: Kusalananda,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-25 20:42:08

Zawsze używam du -sk (-k zamiast tego flaga pokazująca Rozmiar pliku w kilobajtach).

 6
Author: Crenshaw,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-26 17:20:18
du -h --max-depth=1 . | sort -n -r
 6
Author: StarDust,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-22 00:59:42

Du-sch * w tym samym katalogu.

 4
Author: John,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-04 05:38:16

Spójrz na du polecenie to

 3
Author: zappan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-19 17:30:09

To są świetne sugestie, ale ta, której używam, to:

du -ksh * | sort -n -r

-ksh zapewnia, że pliki i foldery są wyświetlane w formacie czytelnym dla człowieka oraz w megabajtach, kilobajtach itp. Następnie sortujesz je numerycznie i odwracasz sortowanie, aby najpierw stawiało większe.

Jedynym minusem tego polecenia jest to, że komputer nie wie, że gigabajt jest większy niż megabajt, więc będzie sortować tylko po numerach i często znajdziesz takie listy:

120K
12M
4G

Po prostu bądź uważaj na jednostkę.

To polecenie działa również na komputerze Mac(podczas gdy sort -h nie działa na przykład).

 3
Author: kakubei,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-28 09:31:36
du -S

du mają jeszcze jedną użyteczną opcję: -S, --separate-dirs mówienie du Nie uwzględniaj rozmiaru podkatalogów - przydatne przy niektórych okazjach.

Przykład 1-pokazuje tylko Rozmiar pliku w katalogu:

du -Sh  * 
3,1G    10/CR2
280M    10

Przykład 2-pokazuje rozmiary plików i podkatalogi w katalogu:

du -h  * 
3,1G    10/CR2 
3,4G    10
 3
Author: sopel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-26 17:24:49

Du-sm * / sort-nr

Wyjście według rozmiaru

 3
Author: Amir,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-03 10:09:47

This is one I like

update: poprzednia nie podobała mi się, ponieważ nie pokazywała plików w bieżącym katalogu, tylko wymieniała katalogi.

Przykładowe wyjście dla /var na ubuntu:

sudo du -hDaxd1 /var | sort -h | tail -n10

4.0K    /var/lock
4.0K    /var/run
4.0K    /var/www
12K     /var/spool
3.7M    /var/backups
33M     /var/log
45M     /var/webmin
231M    /var/cache
1.4G    /var/lib
1.7G    /var
 3
Author: meffect,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-30 23:24:33

Tylko ostrzeżenie, jeśli chcesz porównać rozmiary plików. du generuje różne wyniki w zależności od systemu plików, rozmiaru bloku,... .

Może się zdarzyć, że rozmiar plików będzie inny, np. porównując ten sam katalog na lokalnym dysku twardym i urządzenie pamięci masowej USB. Używam następującego skryptu, w tym ls, aby podsumować rozmiar katalogu. Wynik w bajtach biorąc pod uwagę wszystkie podkatalogi.

echo "[GetFileSize.sh] target directory: \"$1\""

iRetValue=0

uiLength=$(expr length "$1")
if [ $uiLength -lt 2 ]; then
  echo "[GetFileSize.sh] invalid target directory: \"$1\" - exiting!"
  iRetValue=-1
else
  echo "[GetFileSize.sh] computing size of files..."

  # use ls to compute total size of all files - skip directories as they may
  # show different sizes, depending on block size of target disk / file system
  uiTotalSize=$(ls -l -R $1 | grep -v ^d | awk '{total+=$5;} END {print total;}')
  uiLength=$(expr length "$uiTotalSize")
  if [ $uiLength -lt 1 ]; then
    uiTotalSize=0
  fi
  echo -e "[GetFileSize.sh] total target file size: \"$uiTotalSize\""

fi

exit "$iRetValue"
 2
Author: Martin Wilde,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-05 11:37:35

Aby wyświetlić rekurencyjnie rozmiary plików i podkatalogów bieżącego katalogu:

du -h .

Aby wyświetlić informacje o tym samym rozmiarze ale bez rekurencyjnego drukowania ich podkatalogów (które mogą być ogromną listą), wystarczy użyć opcji -- max-depth:

du -h --max-depth=1 .
 1
Author: Pascal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-11 12:27:25

Przez jakiś czas używałem Nautilusa (na pulpicie Gnome w RHEL 6.0), aby usunąć Pliki z mojego folderu domowego zamiast używać polecenia rm w bash. W rezultacie całkowity rozmiar pokazany przez

du -sh

Nie pasowała suma użycia dysku każdego podkatalogu, gdy użyłem

du -sh *

Zajęło mi trochę czasu, aby uświadomić sobie, że Nautilus wysyła usunięte pliki do swojego folderu Kosza, a tego folderu nie ma na liście w Komendzie du -sh *. Chciałem się tym podzielić, na wypadek, gdyby ktoś napotkał ten sam problem.

 1
Author: CrossEntropy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-25 14:55:09

Hmm, najlepszym sposobem jest użycie tego polecenia:

du -h -x / | sort -hr >> /home/log_size.txt

Wtedy będziesz mógł uzyskać foldery wszystkich rozmiarów na całym swoim serwerze. Łatwo pomóc Ci znaleźć największe rozmiary.

 1
Author: Xanarus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-09 23:49:32

Napotkałem problem podobny do tego, co opisał Martin Wilde, w moim przypadku porównując ten sam katalog na dwóch różnych serwerach po dublowaniu z rsync.

Zamiast używać skryptu dodałem flagę -b do du, która liczy rozmiar w bajtach i o ile mogę określić wyeliminowała różnice na dwóch serwerach. Nadal możesz użyć -s -h, aby uzyskać zrozumiałe wyniki.

 0
Author: booltype,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-14 18:55:04

Type "ls-ltrh / path_to_directory"

 -1
Author: user6051290,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-11 17:47:05

Następujące rzeczy łatwo zapamiętać

ls -ltrapR

Spis treści katalogu

- l użyj formatu długiej listy

- T Sortuj według czasu modyfikacji, od najnowszych

-r, -- reverse odwrotna kolejność podczas sortowania

- a, --all nie ignoruj wpisów zaczynających się od.

- p, --indicator-style = slash Dołącz / wskaźnik do katalogów

-R, --recursive lista podkatalogów rekurencyjnie

Https://explainshell.com/explain?cmd=ls + - ltrapR

 -1
Author: Cryptopat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-18 23:13:44