WITH CHECK
действительно поведение по умолчанию однако, это - хорошая практика для включения в рамках кодирования.
альтернативное поведение состоит в том, чтобы, конечно, использовать WITH NOCHECK
, таким образом, хорошо явно определить Ваши намерения. Это часто используется, когда Вы играете со встроенными разделами.
Как насчет использования параметра --files0-from для du? Вам нужно будет соответствующим образом сгенерировать вывод файла с завершающим нулем:
find . -name "*txt" -exec echo -n -e {}"\0" \; | du -hc --files0-from=-
работает правильно в моей системе.
Программа xargs разбивает все на пакеты, чтобы учесть ограничения, связанные с максимальной длиной командной строки unix. Это по-прежнему более эффективно, чем запуск вашей подкоманды по очереди, но для длинного списка входных данных он будет запускать команду столько раз, что каждый «запуск» будет достаточно коротким и не вызовет проблем.
Из-за этого , вы, вероятно, увидите одну строку вывода на «пакет», который должен запускать xargs.
Поскольку вы можете найти его полезным / интересным, страницу руководства можно найти в Интернете здесь: http: //unixhelp.ed .ac.uk / CGI / man-cgi? xargs
Еще одна вещь, на которую следует обратить внимание (и это может быть опечатка в вашем сообщении или мое недоразумение), заключается в том, что у вас есть "* .txt" без экранирования / цитирования. Т.е.,
xargs busts its input into reasonable-sized chunks - what you're seeing are totals for each of those chunks. Check the man page for xargs on ways to configure its handling of input.
Альтернативным решением является использование awk:
find . -name "*.txt" -exec ls -lt {} \; | awk -F " " 'BEGIN { sum=0 } { sum+=$5 } END { print sum }'