Это распространенная проблема.Правосторонние элементы трубопровода проходят в подоболочке.В этом случае и xargs
, и while
будут выполняться в дочернем процессе оболочки (все они выполняются параллельно, поэтому они должны быть отдельными процессами).
Вам потребуется выполнить рефакторинг своего кода так,Вы не накапливаете значение в подоболочке.Другие показали bash рефакторинг.Вот метод, использующий awk:
find /home/user -type f -mmin -4860 -a -mmin +3420 | xargs du \
| awk '{sum += $1} END {print sum}'
Поместите это в функцию оболочки, если вы хотите записать сумму в переменную:
sum_usage() { ...above pipeline... ; }
totsize=$(sum_usage)
Вы можете поместить все это в $(...)
, но я думаю, что легче читать, используя функции оболочки.