Qual é a diferença entre usar '+' (mais) e ';' (ponto-e-vírgula) no comando -exec?

22

Gostaria de saber que diferença existe entre usar o comando + e ; no final do comando -exec quando eu uso o comando find ?

find .... -exec ... \; 

VS

find .... -exec ... + 
    
por αғsнιη 10.12.2014 / 13:51

1 resposta

28

-exec ... \; executará um item após o outro. Então, se você tiver três arquivos, a linha exec será executada três vezes.

-exec ... {} + é para comandos que podem levar mais de um arquivo por vez (por exemplo, cat , stat , ls ). Os arquivos encontrados por find são encadeados como um comando xargs . Isso significa menos bifurcação e, para pequenas operações, pode significar uma aceleração substancial.

Aqui está uma demonstração de desempenho com 10.000 arquivos vazios.

$ mkdir testdir
$ touch testdir/{0000..9999}

$ time find testdir/ -type f -exec cat {} \;
real    0m8.622s
user    0m0.452s
sys     0m8.288s

$ time find testdir/ -type f -exec cat {} +
real    0m0.052s
user    0m0.015s
sys     0m0.037s

Novamente, isso só funciona em comandos que podem receber vários nomes de arquivos. Você pode descobrir se seu comando é assim, olhando para a sua página de manual. Aqui está a sinopse de man cat :

SYNOPSIS
       cat [OPTION]... [FILE]...

As reticências em [FILE]... significam que pode demorar mais de um arquivo.

+ só pode ser usado em comandos únicos e você deve ter exatamente um {} na linha. \; pode operar com vários grupos de zero a muitos.

    
por Oli 10.12.2014 / 13:55

Tags