sair do find se um -exec falhar

12

Existe uma maneira de escrever um find para que ele quebre se uma das operações -exec falhar em um arquivo?

Por exemplo ( javac é convenientemente usado como um programa que pode retornar um código de saída 1 em alguns arquivos e por nenhum outro motivo):

$ echo "public classXX A{}" >> A.java
$ echo "public class B{}" >> B.java
$ find . -iname \*.java -exec javac {} \;
./A.java:1: error: class, interface, or enum expected
public classXX A{}
       ^
1 error

No exemplo acima, embora o exec no arquivo A.java tenha falhado (e retornado um código de saída 1), o comando find prosseguiu e o arquivo B.java também foi compilado. Existe uma maneira de sair do find ou devo usar alguma forma de for ?

Minha versão do find:

$ find -version  | head -1
find (GNU findutils) 4.4.2
    
por Marcus Junius Brutus 05.06.2014 / 19:10

3 respostas

4

Pelo menos com o GNU find você pode usar:

find ... -exec ... -o -quit
    
por 05.06.2014 / 19:24
3

Eu acho que ...

find ... -exec sh -c 'cmd "$0" || kill $PPID' \{\} \;

... deve fazer o truque para praticamente qualquer find .

    
por 05.06.2014 / 21:14
0

Consulte o manual do find . A resposta do @Hauke me motivou a procurar e a localização do QNX tem uma opção -abort que parece similar à opção -quit do GNU. Isso funciona para mim, desde que eu use \( e \) para expressões de grupo:

find . -mtime -4 -name <pattern> \( -exec my_cmd {} \; -o  -abort \) 

Nota: sem os parens, aborta no primeiro arquivo.

    
por 06.03.2017 / 18:11

Tags