Как найти размер содержимого каталога в unix;
Без использования du /awk?
Вы можете использовать ls -l | <только набор команд>
Как найти размер содержимого каталога в unix;
Без использования du /awk?
Вы можете использовать ls -l | <только набор команд>
Вы можете использовать ответ, представленный в [ https://unix.stackexchange.com/a/238256/10525]
Который
sudo ls -1d */ | sudo xargs -I{} du {} -sh && sudo du -sh
Это на самом деле не делает то, что вы хотите, но, поскольку вы не указали, почему вы не хотите использовать правильный инструмент для работы, я не понимаю, как вы получите подходящий ответ.
Вы, вероятно, ищете команду 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' *
, он также будет работать с файлами в подкаталогах.
Поскольку требование не заключается в использовании 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