-1

Как найти размер содержимого каталога в unix;

Без использования du /awk?

Вы можете использовать ls -l | <только набор команд>

3 ответа3

0

Вы можете использовать ответ, представленный в [ https://unix.stackexchange.com/a/238256/10525]

Который

sudo ls -1d */ | sudo xargs -I{} du {} -sh && sudo du -sh

Это на самом деле не делает то, что вы хотите, но, поскольку вы не указали, почему вы не хотите использовать правильный инструмент для работы, я не понимаю, как вы получите подходящий ответ.

0

Вы, вероятно, ищете команду stat . stat -f '%z' filename показывает размер файла.

Вы можете объединить это с рекурсивным приличным в структуру каталогов, чтобы получить все размеры файлов. Вот пример использования find:

find . -type f -exec stat -f ' + %z' {} \; | xargs expr 0

Первая часть запускает stat -f ' + %z' для каждого файла в каталоге (и всех подкаталогах). Рассмотрим вам эту структуру:

$ ls -l
total 32
-rw-r--r--  1 eric  staff  2 Aug 21 18:13 a
-rw-r--r--  1 eric  staff  4 Aug 21 18:13 b
-rw-r--r--  1 eric  staff  6 Aug 21 18:13 c
-rw-r--r--  1 eric  staff  8 Aug 21 18:13 d

Пример find выше имеет такой вывод:

$ find . -type f -exec stat -f ' + %z' {} \;              
 + 2
 + 4
 + 6
 + 8

xargs expr 0 говорит взять эти строки и сформировать следующую команду:

expr 0 + 2 + 4 + 6 + 8

Что дает в общей сложности 20 байтов. Поскольку вы использовали find вместо просто stat -f ' + %z' * , он также будет работать с файлами в подкаталогах.

0

Поскольку требование не заключается в использовании awk, мы можем использовать Perl с однострочными текстами.

ls -l | perl -lane 'print $F[4]'

где:

−l enables automatic line ending processing.
−a turns on automatic splitting of each input record into fields, stored
   in @F array.
−n includes an implicit input-reading loop. lines are not printed.
−e may be used to enter a single line of script. multiple −e commands
   build up a multiline script.`

Или, если вывод команды ls -l имеет следующий формат (где дата включает название месяца):

-rw-r--r-- 1 root    root      0 Jul  1 06:25 alternatives.log
-rw-r--r-- 1 root    root    280 Jul  1 03:26 alternatives.log.1
-rw-r--r-- 1 root    root    179 Jun  9 03:15 alternatives.log.2.gz
-rw-r--r-- 1 root    root    294 Jan 12  2016 alternatives.log.3.gz
-rw-r--r-- 1 root    root    259 Oct  8  2015 alternatives.log.4.gz
-rw-r--r-- 1 root    root   2970 Sep  3  2015 alternatives.log.5.gz
-rw-r--r-- 1 root    root   2288 Aug 27  2015 alternatives.log.6.gz

мы можем использовать:

ls -l | grep -Po '(\d+) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)' | cut -d" " -f1

где в grep:

-P interprets the pattern as a Perl regular expression (PCRE) 
-o prints only the matched string

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .