我给出了两个命令,例如
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 :匹配任何目录
表达式不等价,因此结果不同。