在 Linux 上,
cd /tmp
mkdir foo; cd foo
Run Code Online (Sandbox Code Playgroud)
现在,运行
find . -name 'foo'
Run Code Online (Sandbox Code Playgroud)
没有输出。而跑步
find /tmp/foo -name 'foo'
Run Code Online (Sandbox Code Playgroud)
给出/tmp/foo
对我来说没有意义的输出。有人可以解释为什么吗?
Gil*_*il' 15
find
遍历指定的目录树,并为它找到的每个文件计算给定的表达式。遍历从给定的路径开始。以下是操作方式的摘要find . -name foo
:
.
.
)是否与模式匹配foo
?不,所以什么都不做。/tmp/foo
是同一目录的另一个名称。但find
不知道(也不应该试图找出答案)。.
,并对每个条目执行遍历过程。
.
and之外的任何条目..
,它find
不会递归遍历。这样工作就完成了。并且find /tmp/foo
:
/tmp/foo
foo
)是否与模式匹配foo
?是的,所以条件匹配。
/tmp/foo
,并对每个条目执行遍历过程。
.
and之外的任何条目..
,它find
不会递归遍历。这样工作就完成了。碰巧.
和/tmp/foo
是同一个目录,但这不足以保证find
两者具有相同的行为。该find
命令具有区分同一文件路径的方法;该-name
谓词是其中之一。find /tmp/foo -name foo
匹配起始目录以及它下面的任何名为foo
. find . -name .
仅匹配起始目录(.
在递归遍历期间永远找不到)。
在应用测试之前没有对命令行参数进行规范化。因此,结果因使用的路径而异(如果涉及符号链接):
cd /tmp
mkdir foo
ln -s foo bar
find /tmp/foo -name foo
find /tmp/bar -name foo
Run Code Online (Sandbox Code Playgroud)
在“您的情况”中,两个调用都会给出相同的结果,这可能(更)令人困惑。-mindepth 1
如果您希望忽略起点(可能是非 POSIX),则可以使用。
归档时间: |
|
查看次数: |
325 次 |
最近记录: |