Quero saber o significado de {} + no exec comando e qual é a diferença entre {} + e {} \;. Para ser exato, qual é a diferença entre esses dois:

find . -type f -exec chmod 775 {} + find . -type f -exec chmod 775 {} \; 

Comentários

  • Está descrito em man find(1) em muitos detalhes, facilmente para ser encontrado por qualquer pessoa. Não ' seja preguiçoso.
  • Obrigado querido Miroslav, pesquisei em man exec!
  • Ah, eu nunca tinha conhecido o uso do {} + antes. Eu normalmente uso xargs para isso (e frequentemente find ... -print0 | xargs -0 ...)

Resposta

Usar ; (ponto e vírgula) ou + (sinal de mais) é obrigatório para encerrar os comandos shell invocados por -exec / execdir.

A diferença entre ; (ponto e vírgula) ou + (sinal de mais) é como os argumentos são passados para find “s -exec / -execdir parâmetro. Por exemplo:

  • usar ; executará vários comandos (separadamente para cada argumento),

    Exemplo:

    $ find /etc/rc* -exec echo Arg: {} ";" Arg: /etc/rc.common Arg: /etc/rc.common~previous Arg: /etc/rc.local Arg: /etc/rc.netboot 

    Todos os argumentos seguintes para find são considerados argumentos para o comando.

    A string {} é substituído pelo nome do arquivo atual e sendo processado.

  • usando + executará o mínimo de comandos possível (pois os argumentos são combinados). É muito semelhante a como o comando xargs funciona, então usará tantos argumentos por comando quanto possível para evitar exceder o limite máximo de argumentos por linha.

    Exemplo:

    $ find /etc/rc* -exec echo Arg: {} "+" Arg: /etc/rc.common /etc/rc.common~previous /etc/rc.local /etc/rc.netboot 

    A linha de comando é construída anexando cada nome de arquivo selecionado no final.

    Apenas uma instância de {} é permitida no comando.

Veja também:

Comentários

Resposta

Dado que o comando find fica abaixo de três arquivos:

fileA fileB fileC 

Se você usar -exec com um sinal de mais (+) assinar,

find . -type f -exec chmod 775 {} + 

será:

chmod 775 fileA fileB fileC 

A linha de comando é construída anexando-se cada nome de arquivo correspondente no final, que é da mesma forma que xargs cria suas linhas de comando. O número total de invocações do comando (chmod, neste caso) será muito menor que o número de arquivos correspondentes.

Se você usar -exec com um ponto e vírgula (;),

find . -type f -exec chmod 775 {} \; 

será:

chmod 775 fileA chmod 775 fileB chmod 775 fileC 

Resposta

De acordo com o man find:

-exec command {} + This a variante da ação -exec executa o comando especificado nos arquivos selecionados, mas a linha de comando é construída 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 forma que xargs constrói suas linhas de comando. Apenas uma instância de ‘{}’ é permitida no comando. O comando é executado no diretório inicial.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *