像 mv 这样的递归命令会缓存文件列表吗?

像 mv 这样的递归命令会缓存文件列表吗?

我想将foo特定时刻的文件夹的目录内容(包括子文件夹结构)移动到另一个目录。如果文件被添加到原始文件夹,则不应移动它们。

如果我在进程运行时运行类似命令mv foo/* bar/并将文件添加到文件夹中,可以观察到哪些行为?foo

  • 文件已移动

  • 文件未移动

  • 如果文件名排在当前正在移动的文件的文件名之后,则文件被移动

  • 其他行为

Windows/DOS 中的行为是否不同?解决所描述问题的最简单方法是什么?

答案1

没有缓存因为该mv命令甚至看不到通配符。

发生的情况是命令行扩展通配符并将扩展列表传递给mv

所以如果你有foo/1' andfoo/2 andfoo/3` 然后运行

mv foo/* bar/

将扩大并实际上跑步

mv foo/1 foo/2 foo/3 bar/

一旦 shell 完成扩展并开始执行mv命令,那么对目录的任何更改foo(例如foo/4添加)都不会成为命令的一部分,因此将被保留。

这个过程被称为globbing

相关内容