以下find-exec(mv)
命令找到名为 say 的目录prog-3.6.9-stable-gnu
并成功更改其名称。然而,该命令还会返回:
查找:'./prog':没有这样的文件或目录
这是命令:
find ./ -type d -name 'prog-*' -exec mv {} prog \;
find-exec(rm)
当该目录时我得到类似的结果:
鉴于 find 命令来了前正在工作的 exec unzip (或 exec rm -rf )我想问为什么我会有这个 stderr?我的意思是,如果文件被发现并被更改,为什么 stderr 会是“没有这样的文件或目录”?
答案1
出现该错误是因为您正在移动文件夹“ prog-*
”。
的实际行为find
是:
find
首先分析目录本身,然后分析其内容。
所以find
,在你的例子中:
1.发现目录prog-3.6.9-stable-gnu
2.重命名它在prog
(所以现在有一个新名称)
3. 尝试访问prog-3.6.9-stable-gnu
4. 它返回一个错误,因为现在它无法找到该文件夹prog-3.6.9-stable-gnu
寻找首先分析目录,然后分析其内容的顺序称为“广度优先遍历”。与之相反的是“深度优先遍历”。有一个选项-depth
可以调用它。阅读-depth
中提到的内容很有趣手册页寻找(1)。
- “
-depth
:在目录本身之前处理每个目录的内容。” - “
-delete
动作也暗示着-depth
。” - “不要忘记 find 命令行被评估为一个表达式,因此放在
-delete
前面将使 find 尝试删除您指定的起点以下的所有内容。” - “当测试稍后打算与 一起使用的 find 命令行时
-delete
,您应该明确指定-depth
以避免以后出现意外。” - “因为
-delete
暗示-depth
,你不能有效地将-prune
and-delete
一起使用。”