如果 -exec 失败,则中断查找

Mar*_*tus 15 find

有没有办法编写一个,find以便-exec在文件中的一个操作失败时它会中断?

例如 (javac可以方便地用作可以在某些文件上返回退出代码 1 而没有其他原因的程序):

$ 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
Run Code Online (Sandbox Code Playgroud)

在上面的示例中,虽然exec文件上的A.java失败(并返回退出代码 1),但find命令继续执行并编译文件B.java。有没有办法摆脱find或者我应该使用某种形式的for代替?

我的查找版本:

$ find -version  | head -1
find (GNU findutils) 4.4.2
Run Code Online (Sandbox Code Playgroud)

Hau*_*ing 5

至少在 GNU 中find你可以使用:

find ... -exec ... -o -quit
Run Code Online (Sandbox Code Playgroud)

  • 使用 `-exec ... -o -quit` 对我不起作用。它不处理 _any_ 文件。但是这条线有效:`find 。-iname \*.java -not -exec javac '{}' \; -quit`:如果`-exec` 为false,则调用`-quit`,即。返回非零。 (2认同)

mik*_*erv 5

我认为...

find ... -exec sh -c 'cmd "$0" || kill $PPID' \{\} \;
Run Code Online (Sandbox Code Playgroud)

...应该可以解决任何问题find