Общий размер группы файлов, выбранных с помощью '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.
Ответы
Ответ 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