Use find para executar uma série de comandos

3

Eu quero examinar um diretório e executar um comando para cada pasta correspondente. O seguinte find retorna corretamente a lista que estou procurando.

find . -maxdepth 1 -name "*.bitbucket"

Para cada item retornado, quero executar o comando:

hg pull --update --repository [FIND_RESULT_HERE]

Existe uma maneira simples de fazer isso usando find e xargs? Se não, qual é a melhor alternativa?

    
por Robert Altman 03.06.2011 / 17:34

3 respostas

4

Use a opção -exec para find da seguinte forma:

find . -maxdepth 1 -name "*.bitbucket" -exec hg pull --update --repository {} \;

O {} é substituído pelo resultado da busca e o \; terminator indica que eles devem ser executados um de cada vez. Um + faria com que vários deles fossem agrupados como argumentos.

    
por 03.06.2011 / 17:44
0
find . -maxdepth 1 -name "*.bitbucket" -execdir hg pull --update --repository {} +

processará vários arquivos em paralelo. Nem todo achado pode ter um exexdir; O Gnu / find sugere usá-lo para evitar erros.

    
por 03.06.2011 / 19:31
-1

@ A resposta de Caleb é boa. Ou você pode fazer isso com xargs .

Se você quer fazer o hg por cada resultado de busca, (como apontado pelo @Caleb,)

find . -depth 1 -name "*.bitbucket" | xargs -n1 hg pull --update --repository

Se você quiser acumular todos os resultados do resultado em um comando, remova o -n1 .

Além disso, tenha cuidado com -depth . Esta opção não usa nenhum argumento. Eu acho que você quer dizer -maxdepth .

    
por 03.06.2011 / 17:59

Tags