Unix、find 命令和误判

Unix、find 命令和误判

从该文件所在的当前目录执行搜索,此 find 命令会找到该文件。

# find . page.tpl.php

但是,当我从子目录搜索时,此命令

# find ../. page.tpl.php

打印出文件列表,并在输出中列出请求的文件,

.././parent_dir/page.tpl.php

然而,结果是,

find: `page.tpl.php': No such file or directory

然后当我添加 -name 参数时它就起作用了,

# find ../. -name page.tpl.php

我有时会忘记使用参数,而假阴性结果确实令人恼火。发生了什么?

答案1

find [path] [expressions]

文件名不是表达式。

默认操作是打印。

对于路径,“..”比“../.”更好,您几乎不需要包含“.”,除非它位于相对路径的开头。

答案2

find 命令使用:
find [-H] [-L] [-P] [路径...] [表达式]

您的第一个例子是:
find ../. page.tpl.php

您所做的就是为 find 提供两个搜索路径。由于默认表达式是 print,因此两个路径的内容被打印到 stdout。

考虑一下:

mkdir a b c 
touch  a/file1 a/file2 b/SANTACLAUS c/MONKEYS
find a b

$ find a b
a
a/file2
a/file1
b
b/SANTACLAUS

你的第二个例子是:
.././parent_dir/page.tpl.php

这里您提供了一个搜索路径。错误告诉您在 CWD 中找不到 page.tpl.php。我认为这是因为您在目录“parent_dir”下没有文件“page.tpl.php”。

相关内容