Como posso executar múltiplas expressões usando a opção -exec no Linux através do comando find?

Como posso executar múltiplas expressões usando a opção -exec no Linux através do comando find?

Eu li a postagem emComo executo vários comandos ao usar find?. A menos que eu tenha entendido mal a resposta fornecida, não acredito que ela forneça a solução que procuro.

Minha exigência é encontrar um conjunto específico de arquivos. Se for encontrado, crie um diretório. Se o diretório foi criado com sucesso somente então para extrair os arquivos. Uma vez extraído, exclua os arquivos de origem. Como eu seria capaz de conseguir isso?

Responder1

O link que você postou dá a resposta "correta", na minha opinião. Basta gerar uma concha. Sem fazer isso, você não terá uma caixa de ferramentas grande o suficiente. Vocêpoderiaconstrua um comando find em pseudocódigo, como:

find /path -criteria -exec mkdir {} \; -exec extract {} \; -exec rm {} \;

Isso irá parar em qualquer erro, já que os predicados são naturalmente agrupados. Porém, isso oferece controle insuficiente sobre a nomenclatura do diretório. É garantido que falhará.

Gerar um shell resolve isso, pois você terá toda a linguagem do shell ao seu alcance:

find /path -criteria -exec /bin/sh '
    for d; do
        mkdir "${d##*/}" && tar xvf "$d" && rm "$d"
    done' _ {} +

Observe que esta versão tem o efeito colateral de continuar com um erro para qualquer iteração do loop - ela gera um único shell paratodosresultados. Eu sugiro gerar o shell com o sinalizador -e se você quiser interromper qualquer erro.

informação relacionada