假设我移动到以下路径的空目录:/home/user/dir
如果我执行:find . ! -name "*.txt"
结果是:
.
但如果我执行,find /home/user/dir ! -name "*.txt"
我不会得到任何结果。
为什么 find 有这种行为?哪里指定的?
而且,为什么..
不包括在内?
答案1
Find 不应该打印在目录树搜索过程中遇到的.
和条目..
。无论如何,它们都没有用处。如果你把它从 开始.
,它确实会打印出来。
这寻找实用程序应从由指定的每个文件递归地降低目录层次结构小路,[...]层次结构中遇到的其他文件的所有路径名应由当前路径操作数、a(如果当前路径操作数不以 1 结尾)和相对于路径操作数的文件名的串联组成。相关部分不得包含点或点-点组件,没有尾随 <slash> 字符,路径名组件之间只有单个 <slash> 字符。
使用,可以找到find ./foo
类似的路径名,其中,将是当前路径操作数,添加在中间,并且将是相对部分。./foo/bar/hello.txt
./foo
/
bar/hello.txt
find /home/user/dir ! -name "*.txt"
至少应该打印/home/user/dir
因为dir
不匹配*.txt
。 (当然,它还应该打印名称不以 结尾的任何其他文件.txt
)。如果您find /home/user/dir -name "*.txt"
没有使用否定,/home/user/dir
则不会打印,因为它与条件不匹配。