我想输出命令成功的文件的名称,当我预期它会失败时,同时抑制警告。我更喜欢单行。
有些事情:
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
到目前为止,我并没有得到太多的爱。建议?
答案 0 :(得分:1)
试试这个:
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
调用它。这两个程序都只能执行实际的程序。
答案 1 :(得分:0)
答案 2 :(得分:0)
尝试使用“-exec sh -c ...”
调用子shellfind 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" \;