要求如果找不到该文件,则该命令不应返回0状态且应该失败
假设我有执行命令来查找测试文件,如果找不到文件,则不应该成功执行并返回0状态
由于
答案 0 :(得分:1)
有一个shell运算符可以专门测试文件是否存在:
if [ -e "${FILE}" ]
then
echo "${FILE} exists"
fi
它避免了find
的副作用,例如是否"某事物"在多个路径中找到,或者没有找到预期路径,或遇到其他错误。如果您需要指定相关文件的其他属性,则可以将-e
与other operators合并。
答案 1 :(得分:0)
find
即使没有找到也会退出0,因为它仍然是成功的。
来自find的联机帮助页:
如果成功处理所有文件,找到状态为0的出口, 如果发生错误,则大于0
如果你想要一个单行的状态不是0,如果没有找到,请使用:
find /tmp -name something | egrep '.*'
答案 2 :(得分:0)
正如其他答案中所提到的,除非出现错误并且没有将无结果方案视为错误,否则查找返回0(成功)。这与大多数搜索程序的设计工作方式一致(没有结果不被视为错误)。
此命令将通过计算结果并仅在找到结果时返回退出状态0来执行您想要的操作。
(( $(find <expression> | wc -l) > 0 ))
以下是这样做的:
find
使用您在<expression>
中设置的参数运行。提示:测试这些以确保它们有效。find
的结果每行输出一个。这通过管道传输到wc -l
。wc -l
将计算find
返回的结果行数,并将其作为数字返回(如果没有结果/行,则返回0)。注意:这是数字0而不是退出代码。只有在找到结果时才会有效地返回状态代码。
注意:您需要bash。如果你的发现表达不好,可能会产生误报(任何人都知道如何解决这个问题?)。