5

В вопросе [ Найти и удалить все каталоги с именем "test" в linux ] на этом сайте лучший ответ говорит об использовании этих двух команд:

find . -name test -type d -print0|xargs -0 rm -r --
find . -name test -type d -exec rm -r {} +

потому что они будут вызывать rm со списком каталогов, а не вызывать его много раз по отдельности.

Поскольку я не могу комментировать там из-за низкой репутации, я задаю здесь новый вопрос:

Есть ли ограничение на количество файлов, которые могут быть переданы в rm с помощью этих методов (кроме реалистичных ограничений системных ресурсов)?

В оболочке такая команда, как 'rm *', может превышать максимальную длину командной строки оболочки, но применяются ли подобные ограничения к этому использованию find + или через канал к xargs?

1 ответ1

5

Короче нет.

Длинный ответ: - Find будет запускать команду, указанную exec для каждого совпадения, поэтому, если ваш find найдет 20 файлов, он запустит 20 отдельных экземпляров rm. - xargs определит максимальную длину команды для вашей оболочки и добавит аргументы в этих пределах, как вы можете увидеть с помощью вывода xargs --show-limits mtak@frisbee:~$ xargs --show-limits Your environment variables take up 4050 bytes POSIX upper limit on argument length (this system): 2091054 POSIX smallest allowable upper limit on argument length (all systems): 4096 Maximum length of command we could actually use: 2087004 Size of command buffer we are actually using: 131072

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .