有没有办法编写一个,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)
至少在 GNU 中find你可以使用:
find ... -exec ... -o -quit
Run Code Online (Sandbox Code Playgroud)
我认为...
find ... -exec sh -c 'cmd "$0" || kill $PPID' \{\} \;
Run Code Online (Sandbox Code Playgroud)
...应该可以解决任何问题find。