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

0

Eu li a postagem em Como 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 estou procurando.

Meu requisito é encontrar um conjunto específico de arquivos. Se for encontrado, crie um diretório. Se o diretório foi criado com sucesso apenas para extrair os arquivos. Uma vez extraído para excluir os arquivos de origem. Como eu poderia conseguir isso?

    
por PeanutsMonkey 21.09.2012 / 08:02

1 resposta

3

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

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

Isto irá parar em qualquer erro, pois os predicados são naturalmente e juntos. Mas, isso lhe dá controle insuficiente sobre a nomeação do diretório. É garantido que falhará.

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

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

Note que esta versão tem o efeito colateral de continuar com um erro para qualquer iteração do loop - ele gera um único shell para os resultados all . Eu sugiro a desova do shell com o sinalizador -e se você quiser parar com qualquer erro.

    
por 25.09.2012 / 06:01

Tags