我想输出命令成功的文件名,当我预计它会失败的时候,同时抑制警告。我更喜欢一句笑话。
大致是这样的:
find xml/malformed-xml -type f -iname '*.xml' -exec if xmllint --noout --dtdvalid check-xml.dtd {} 2>/dev/null; then echo "Should have failed for {}"; fi \;
或
find xml/malformed-xml -type f -iname '*.xml' -print0 | xargs -0 -n 1 -i if xmllint --noout --dtdvalid check-xml.dtd {} 2>/dev/null ; then echo "Should have failed for {}"; fi
到目前为止,我没有得到太多的爱。有什么建议吗?
发布于 2016-09-03 21:21:48
试试这个:
find xml/malformed-xml -type f -iname '*.xml' -exec xmllint --noout --dtdvalid check-xml.dtd {} \; -print 2>/dev/null
说明:在find
中,参数由-and
隐式分隔。所以-exec ... {} \; -print
实际上就是-exec ... {} \; -print
。现在,由于-and
的短路逻辑,第二部分只有在第一部分成功的情况下才会执行。
这两个建议都失败的原因是,if ... then ... else ...
不是一个程序,它是一个bash内置程序,所以您不能从find -exec
或xargs
调用它。这两个程序都只能执行实际的程序。
发布于 2016-09-03 21:22:32
发布于 2016-09-03 21:29:03
尝试使用"-exec sh -c ...“调用子外壳。
find xml/malformed-xml -type f -iname '*.xml' -exec sh -c "if xmllint --noout --dtdvalid check-xml.dtd {} 2>/dev/null; then echo Should have failed for {}; fi" \;
https://stackoverflow.com/questions/39307313
复制相似问题