O que o comando + in find / path / -exec '{}' + faz?

13

Qual é o +em find /path/ -exec command '{}' +tarefas? em oposição afind /path/ -exec command '{}' \;

xenoterracida
fonte

Respostas:

17

O '+' cria uma grande linha de comando de todos os arquivos encontrados para minimizar o número de comandos a serem executados.

Dado o caso em que um comando find encontra quatro arquivos.

find . -type f -exec command '{}' \;

produziria

command file1
command file2
command file3
command file4 

Por outro lado

find . -type f -exec command '{}' \+

produz

command file1 file2 file3 file4
ddeimeke
fonte
3
Se você sabe xargs, -exec … {} +faz o mesmo que -print | xargs …, mas sem os problemas de citação ( -print0 | xargs -0é outra maneira, mas é menos portátil).
Gilles 'SO- stop be evil' em
4

Na página do manual:

comando -exec {}

Essa variante da ação -exec executa o comando especificado nos arquivos selecionados, mas a linha de comandos é criada anexando cada nome de arquivo selecionado no final; o número total de invocações do comando será muito menor que o número de arquivos correspondentes. A linha de comando é construída da mesma maneira que o xargs cria suas linhas de comando. Apenas uma instância de `{} 'é permitida dentro do comando. O comando é executado no diretório inicial.

tante
fonte
1
homem que é muito ... conciso? Acho que falta profundidade e clareza.
Xenoterracide
A idéia não é gerar cegamente um processo para cada arquivo, mas reunir os nomes dos arquivos e chamar o comando menos vezes. Um exemplo: em vez de criar 3 processos "rm FILENAME" diferentes, ele reúne os nomes dos arquivos e faz "rm FILE1 FILE2 FILE2 FILE3".
tante
O IIRC, algumas versões do xargs, tem a opção de agrupar esses nomes até um limite especificado, para que você possa se beneficiar disso, mas também evitar transbordar quando tiver uma lista grande também.
quer
(Encontrar, em si, é uma linguagem pouco assustador todos os seus próprios!)
Kevin Cantu
findme dá um semi.
Matt Alexander