从该文件所在的当前目录执行搜索,此 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”。