Está usando xargs mais rápido do que não usá-lo?

5

É mais rápido:

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

do que isso:

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

Então, usar xargs aumentaria a velocidade geral?

(recebi o exemplo da página man de xargs .)

    
por LanceBaynes 13.11.2011 / 11:49

2 respostas

7

Como Mat já disse, no caso geral você deve estar ciente do fato de que todo byte pode estar em um nome de arquivo, exceto o caracter NUL (pois delimita o final da string ) e / (como ele delita elementos de caminho). Então, seu xargs exemplo deve ser (em um sistema GNU)

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

Equivalente é um -exec no achado, mas com um + em vez do \; .

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

Esta versão não chama /bin/rm para cada arquivo, mas agrupa os argumentos, assim como xargs faz.

    
por 13.11.2011 / 13:30
5

A primeira versão pode ser mais rápida que a segunda: xargs passará vários arquivos de uma vez para rm , mas find chamará rm uma vez por arquivo.

Portanto, pode haver menos chamadas fork / exec com a primeira versão.

(Se houver uma única correspondência ou nenhuma, a segunda versão provavelmente será mais rápida: não é necessário executar xargs em si.)

Mas não acho que seja um bom critério para escolher um ou outro. Neste caso específico, você não precisa se preocupar com nomes de arquivos estranhos, mas em geral você deve. A segunda versão é mais segura, então você deve, geralmente, usar isso.

    
por 13.11.2011 / 12:15

Tags