Pelo menos com o GNU find
você pode usar:
find ... -exec ... -o -quit
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
Pelo menos com o GNU find
você pode usar:
find ... -exec ... -o -quit
Eu acho que ...
find ... -exec sh -c 'cmd "$0" || kill $PPID' \{\} \;
... deve fazer o truque para praticamente qualquer find
.
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.
Tags find