find exec mv 找到一个 inode (dir),更改 dir 的名称,但返回“没有这样的文件或目录”

find exec mv 找到一个 inode (dir),更改 dir 的名称,但返回“没有这样的文件或目录”

以下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,你不能有效地将-pruneand-delete一起使用。”

相关内容