如果找不到文件,查找命令应该失败

时间:2015-04-15 11:07:46

标签: linux shell comma

要求如果找不到该文件,则该命令不应返回0状态且应该失败

假设我有执行命令来查找测试文件,如果找不到文件,则不应该成功执行并返回0状态

由于

3 个答案:

答案 0 :(得分:1)

有一个shell运算符可以专门测试文件是否存在:

if [ -e "${FILE}" ]
then
    echo "${FILE} exists"
fi

它避免了find的副作用,例如是否"某事物"在多个路径中找到,或者没有找到预期路径,或遇到其他错误。如果您需要指定相关文件的其他属性,则可以将-eother 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而不是退出代码。
  • 比较行数以查看它是否大于0.如果是,则返回退出代码0(true),否则返回退出代码1(false)。

只有在找到结果时才会有效地返回状态代码。

注意:您需要bash。如果你的发现表达不好,可能会产生误报(任何人都知道如何解决这个问题?)。