Если список файлов слишком велик, чтобы его можно было передать в один вызов du -c
, то в системе GNU можно сделать:
find . -iname '*.jpg' -type f -printf '%b\t%D:%i\n' |
sort -u | cut -f1 | paste -sd+ - | bc
(размер, выраженный в количестве блоков по 512 байт). Как и du
, он пытается считать жесткие ссылки только один раз. Если вас не волнуют жесткие ссылки, вы можете упростить это до:
(printf 0; find . -iname '*.jpg' -type f -printf +%b) | bc
Если вы хотите, чтобы размер вместо диска использовался, замените %b
на %s
. Затем размер будет выражен в байтах
Длительный процесс lsof
обычно означает, что разрешение DNS истекло или работает некорректно, что задерживает его вывод.
Вы можете отключить разрешение DNS, добавив параметр -n
.
Конечно, вы можете проверить, почему разрешение DNS на вашем сервере занимает слишком много времени.