Подтвердить что ты не робот

Общий размер группы файлов, выбранных с помощью 'find'

Например, у меня есть большая файловая система, которая заполняется быстрее, чем я ожидал. Поэтому я ищу, что добавляется:

find /rapidly_shrinking_drive/ -type f -mtime -1 -ls | less

И я нахожу, ну, много чего. Тысячи файлов из шести-семи типов. Я могу выделить тип и посчитать их:

find /rapidly_shrinking_drive/ -name "*offender1*" -mtime -1 -ls | wc -l

но мне бы очень хотелось, чтобы получить общий размер на диске этих файлов:

find /rapidly_shrinking_drive/ -name "*offender1*" -mtime -1 | howmuchspace

Я открыт для однострочного Perl для этого, если у кого-то есть, но я не собираюсь использовать какое-либо решение, которое включает многострочный script или File:: Find.

4b9b3361

Ответ 1

Команда du сообщает вам об использовании диска. Пример использования для вашего конкретного случая:

find rapidly_shrinking_drive/ -name "offender1" -mtime -1 -print0 | du --files0-from=- -hc | tail -n1

(Раньше я писал du -hs, но на моей машине, которая, как представляется, игнорирует ввод find и вместо этого суммирует размер cwd.)

Ответ 2

Дарн, Стефан202 прав. Я не думал о du -s (суммировать), поэтому вместо этого я использовал awk:

find rapidly_shrinking_drive/ -name "offender1" -mtime -1 | du | awk '{total+=$1} END{print total}'

Мне нравится другой ответ лучше, хотя, и это почти наверняка более эффективно.

Ответ 3

с GNU find,

 find /path -name "offender" -printf "%s\n" | awk '{t+=$1}END{print t}'

Ответ 4

Я хотел бы продвинуть комментарий jason выше к статусу ответа, потому что я считаю это самой мнемонической (хотя и не самой общей, если у вас действительно есть список файлов, указанный find):

$ du -hs *.nc
6.1M  foo.nc
280K  foo_region_N2O.nc
8.0K  foo_region_PS.nc
844K  foo_region_xyz.nc
844K  foo_region_z.nc
37M   ETOPO1_Ice_g_gmt4.grd_region_zS.nc
$ du -ch *.nc | tail -n 1
45M total
$ du -cb *.nc | tail -n 1
47033368  total

Ответ 5

Я пробовал все эти команды, но не повезло. Поэтому я нашел этот ответ, который дает мне ответ:

find . -type f -mtime -30 -exec ls -l {} \; | awk '{ s+=$5 } END { print s }'

Ответ 6

Вы также можете использовать ls -l, чтобы найти их размер, затем awk, чтобы извлечь размер:

find /rapidly_shrinking_drive/ -name "offender1" -mtime -1 | ls -l | awk '{print $5}' | sum