Использование ls для вывода списка каталогов и их общего размера - PullRequest
721 голосов
/ 19 июня 2009

Можно ли использовать ls в Unix для отображения общего размера подкаталога и всего его содержимого, в отличие от обычного 4K, который (я предполагаю) является просто самим файлом каталога? И.Е.

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

После поиска страниц справочника я выхожу пустым.

Ответы [ 25 ]

1362 голосов
/ 19 июня 2009

Попробуйте что-то вроде:

du -sh *

короткая версия:

du --summary --human-readable *

Пояснение:

du: D ИСК U Шалфей

-s: отображение сводки для каждого указанного файла. (Эквивалентно -d 0)

-h: «Человекочитаемый» вывод. Используйте суффиксы единиц: B yte, K ибибайт (КиБ), M ибибайт (МиБ), G ибибайт (ГиБ), T эбибайт (TiB) и P эбибайт (PiB). (BASE2)

292 голосов
/ 09 апреля 2013

du -sk * | sort -n отсортирует папки по размеру. Полезно при поиске свободного места ..

94 голосов
/ 08 ноября 2013
du -sh * | sort -h

Это будет отображаться в удобочитаемом формате.

42 голосов
/ 17 августа 2015

Чтобы отобразить самые большие каталоги из текущего каталога в удобочитаемом формате:

du -sh * | sort -hr

Лучшим способом ограничения количества строк может быть

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

Где вы можете увеличить суффикс флага -n, чтобы ограничить число строк в списке

Образец:

[~]$ 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

Это делает чтение более удобным:)

24 голосов
/ 18 февраля 2015

Чтобы отобразить его в формате ls -lh, используйте:

(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} }'

Код Awk объяснил:

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
}

Пример вывода:

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
20 голосов
/ 23 июня 2009

Нужная команда: du -sk du = "использование диска"

Флаг -k дает вывод в килобайтах, а не по умолчанию для секторов диска (блоки по 512 байт).

Флаг -s будет перечислять только вещи в каталоге верхнего уровня (то есть текущем каталоге по умолчанию или каталоге, указанном в командной строке). Странно, что du имеет противоположное поведение ls в этом отношении. По умолчанию du будет рекурсивно давать вам использование диска каждого подкаталога. В отличие от этого, ls выдаст список файлов только в указанном каталоге. (ls -R дает вам рекурсивное поведение.)

11 голосов
/ 25 июня 2016

Поместите это объявление функции оболочки в ваши скрипты инициализации оболочки:

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

Я назвал его duls, потому что он показывает выходные данные как du, так и ls (в таком порядке):

$ 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

Пояснение:

Утилита paste создает столбцы из своего ввода в соответствии с заданной вами спецификацией. Имея два входных файла, он помещает их рядом с вкладкой в ​​качестве разделителя.

Мы даем ему вывод du -hs -- "$@" | cut -f1 в качестве первого файла (действительно входной поток) и вывод ls -ld -- "$@" в качестве второго файла.

В функции "$@" будет вычислять список всех аргументов командной строки, каждый в двойных кавычках. Таким образом, он будет понимать символы и пути с пробелами и т. Д.

Двойные минусы (--) сигнализируют об окончании опций командной строки для du и ls. Без них выражение duls -l будет путать du, а любой параметр для du, которого нет у ls, спутал бы ls (и опции, существующие в обеих утилитах, могут не означать одно и то же, и это было бы довольно беспорядок).

cut после du просто вырезает первый столбец вывода du -hs (размеры).

Я решил поместить вывод du слева, иначе мне пришлось бы управлять шатким правым столбцом (из-за разной длины имен файлов).

Команда не будет принимать флаги командной строки.

Это было проверено как в bash, так и в ksh93. Это не будет работать с /bin/sh.

7 голосов
/ 22 июля 2014
du -h --max-depth=1 . | sort -n -r
7 голосов
/ 19 июня 2009

Я всегда использую du -sk (-k флаг, показывающий размер файла в килобайтах).

4 голосов
/ 04 ноября 2014

du -sch * в том же каталоге.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...