Imprime o nome do arquivo e executa um comando em cada resultado do find

1

Estou tentando aplicar dois comandos ( echo e haml --check ) ao resultado de meu find .

haml --check 'find . -name "*.haml"'
# return Syntax error on line 2: Illegal nesting: nesting within plain text is illegal.
# but I don't know which file

echo 'find . -name "*.haml"'
# returns list of files (space separated) 

Idealmente, quero imprimir o nome do arquivo e, em seguida, a saída de haml --check desse arquivo em stdout .

    
por Mohsen 14.05.2013 / 20:10

3 respostas

6

Além disso, uma maneira sem xargs:

find . -name "*.haml" -ls -exec haml --check {} \;

para imprimir apenas o nome do arquivo com o caminho:

find . -name "*.haml" -print -exec haml --check {} \;
    
por 14.05.2013 / 20:18
2
find . -name "*.haml" -print0 | xargs -0 -n 1 --no-run-if-empty haml --check 

executa o haml em cada arquivo encontrado por find

Se haml puder receber vários arquivos em uma só chamada, você poderá deixar de fora o -n 1

    
por 14.05.2013 / 20:13
1

Aqui está uma maneira portátil e eficiente de executar múltiplos comandos com find sem usar os truques "-print0" e "xargs -0" específicos do GNU:

find . -name "*.haml" -exec sh -c 'for i; do echo $i;ls -l $i;haml --check $i; done' sh {} +
    
por 14.05.2013 / 21:47

Tags