find 命令显示不同的结果

find 命令显示不同的结果

我给出了两个命令,例如

find / -name "*.txt" -or -type f -print |wc -l

输出:1270

find / -name "*.txt" -or -type d -print |wc -l

输出:1305

为什么会这样呢?输出应该是相同的,因为我使用的是 OR 运算符。

但如果第一个条件为真,它就不会进入下一个条件,对吗?因此在这种情况下,两个结果将相同,因为两个命令的第一个条件相同且为真。

答案1

不,输出不应该相同。

-type f(文件)与

-type d(目录)

所以计数会不同。 OR 运算符不会改变这一点。

第一个命令报告所有文件(.txt 文件或任何文件),第二个命令报告所有文本文件和所有目录。当然,这些计数会有所不同。

你可能想要的是

$ find / -type f -name '*.txt' | wc -l

注意:如果您的文件名中有换行符,这将会失败。

如果您的文件名中有换行符,请尝试...

$ find . -type f -name "*.txt" -printf '.' | wc -c

仅打印每个文件名的第一个字符并计算字符而不是行数。 (看https://stackoverflow.com/a/15663760

答案2

因为您使用 de OR 运算符,所以您将第二个表达式的结果添加到第一个表达式的结果中:

  • -type f :匹配任何文件
  • -type d :匹配任何目录

表达式不等价,因此结果不同。

相关内容