Использует xargs быстрее, чем не использует его?

Это быстрее:

find /tmp -name core -type f | xargs /bin/rm -f 

чем это:

 find /tmp -name core -type f -exec /bin/rm -f {} \; 

Так будет ли использование xargs увеличивать общую скорость?

(Я получил пример с man-страницы xargs .)

2 Solutions collect form web for “Использует xargs быстрее, чем не использует его?”

Как уже сказал Мат, в общем случае вы должны знать, что каждый байт может быть в имени файла, кроме символа NUL (поскольку он ограничивает конец строки) и / (поскольку он удаляет элементы пути). Таким образом, ваш пример xargs должен быть (в системе GNU)

 find /tmp -name core -type f -print0 | xargs -0 /bin/rm -f 

Эквивалент есть -exec в поиске, но с a + вместо \; ,

 find /tmp -name core -type f -exec /bin/rm -f {} + 

Эта версия не вызывает /bin/rm для каждого файла, но связывает аргументы, как xargs делает xargs .

Первая версия может быть быстрее, чем вторая: xargs будет передавать несколько файлов за раз до rm , но find будет вызывать rm один раз для каждого файла.

Таким образом, с первой версией может быть меньше вызовов fork / exec.

(Если есть одно совпадение или вообще нет, вторая версия, скорее всего, будет быстрее: нет необходимости xargs сам xargs .)

Но я не думаю, что это хороший критерий для выбора того или другого. В этом конкретном случае вам не нужно беспокоиться о странных именах файлов, но в целом вы должны. Вторая версия более безопасна, поэтому вы должны, как правило, использовать ее.

Interesting Posts
Linux и Unix - лучшая ОС в мире.