![像 mv 这样的递归命令会缓存文件列表吗?](https://linux22.com/image/91350/%E5%83%8F%20mv%20%E8%BF%99%E6%A0%B7%E7%9A%84%E9%80%92%E5%BD%92%E5%91%BD%E4%BB%A4%E4%BC%9A%E7%BC%93%E5%AD%98%E6%96%87%E4%BB%B6%E5%88%97%E8%A1%A8%E5%90%97%EF%BC%9F.png)
我想将foo
特定时刻的文件夹的目录内容(包括子文件夹结构)移动到另一个目录。如果文件被添加到原始文件夹,则不应移动它们。
如果我在进程运行时运行类似命令mv foo/* bar/
并将文件添加到文件夹中,可以观察到哪些行为?foo
文件已移动
文件未移动
如果文件名排在当前正在移动的文件的文件名之后,则文件被移动
其他行为
Windows/DOS 中的行为是否不同?解决所描述问题的最简单方法是什么?
答案1
没有缓存因为该mv
命令甚至看不到通配符。
发生的情况是命令行扩展通配符并将扩展列表传递给mv
所以如果你有foo/1' and
foo/2 and
foo/3` 然后运行
mv foo/* bar/
将扩大并实际上跑步
mv foo/1 foo/2 foo/3 bar/
一旦 shell 完成扩展并开始执行mv
命令,那么对目录的任何更改foo
(例如foo/4
添加)都不会成为命令的一部分,因此将被保留。
这个过程被称为globbing
。