假设我移动到以下路径的空目录:/home/user/dir
如果我执行:find . ! -name "*.txt"
结果是:
.
Run Code Online (Sandbox Code Playgroud)
但如果我执行,find /home/user/dir ! -name "*.txt"
我不会得到任何结果。
为什么 find 有这种行为?哪里指定的?
而且,为什么..
不包括在内?
Find 不应该打印在目录树搜索过程中遇到的.
和..
条目。无论如何,它们都没有用处。如果你把它从 开始.
,它确实会打印出来。
find实用程序应从path指定的每个文件递归地沿目录层次结构下降,[...]层次结构中遇到的其他文件的所有路径名应包含当前路径操作数的串联,如果当前路径操作数未结束,则为 a其中之一,以及相对于路径操作数的文件名。相对部分不应包含点或点点组件,不应包含尾随 <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
则不会打印,因为它与条件不匹配。