Предоставляя опцию -c(или --total) для du(1), вы можете дать ей указание произвести итоговую сумму. Если ваша реализация du(1)поддерживает один из этих параметров, вы можете добиться желаемого эффекта с помощью следующей команды:
$ find .-name 'flibble*'-ctime +90-exec du -shc {}+
РЕДАКТИРОВАТЬ: обратите внимание, что если количество файлов превышает максимальное количество параметров, разрешенных вашей системой, findвсе равно может выполняться commandнесколько раз. Некоторые реализации du(1)также поддерживают чтение имен файлов из файла, который не страдает от упомянутого ограничения:
-print0Опция заставляет find(1)печатать найденные имена файлов в стандартный вывод , разделенных нулевым символом, а --files0-fromопция вызывается du(1)для чтения нуль разделенных имен файлов. В отличие от символа новой строки, нулевой символ может не отображаться в имени файла, поэтому вывод является однозначным.
Чтобы узнать больше о возможностях du(1)и find(1), вам следует обратиться к соответствующим страницам справки:
Вы можете получить несколько итогов, если количество файлов важно (1K +) из-за ограничения количества аргументов командной строки.
10
Я могу подтвердить @ychaouche, у меня возникла проблема при попытке оценить размер более 30 тыс. Файлов.
Адриен Х
Если это проблема, некоторые реализации du(1)также поддерживают чтение имен файлов из файла find 1 2 3 -maxdepth 0 -print0 > filenames; du -shc --files0-from=filenames.
Witiko
4
Попробуй это:
du -c `find . -name 'flibble*' -ctime +90`| tail -1
Исходная команда дает du один аргумент, затем выполняет его, пока не пройдет все аргументы. Таким образом, вы просто приводите все аргументы сразу, затем обрезаете отдельные размеры и оставляете только общее количество. Вы можете удалить трубу и хвост, чтобы показать размер каждого файла, если хотите.
Это не даст правильных результатов с путями, содержащими пробелы. Правильный способ сделать это - использовать -exec du -c {} +параметр find, который будет передавать пути без изменений du.
Witiko
4
Вы можете попробовать это:
find .-name 'flibble*'-ctime +90-exec du -ch {}+| grep total
du(1)
также поддерживают чтение имен файлов из файлаfind 1 2 3 -maxdepth 0 -print0 > filenames; du -shc --files0-from=filenames
.Попробуй это:
Исходная команда дает du один аргумент, затем выполняет его, пока не пройдет все аргументы. Таким образом, вы просто приводите все аргументы сразу, затем обрезаете отдельные размеры и оставляете только общее количество. Вы можете удалить трубу и хвост, чтобы показать размер каждого файла, если хотите.
источник
-exec du -c {} +
параметрfind
, который будет передавать пути без измененийdu
.Вы можете попробовать это:
источник
Я бы
find
сам распечатал размер и использовал другой инструмент для вычисления суммы:Если вы также хотите увидеть имена файлов:
источник
Один лайнер, который должен работать для получения общего гигабайта на большинстве систем:
источник