cp 不会复制源位置的新文件(触发 cp 命令后创建的文件)

cp 不会复制源位置的新文件(触发 cp 命令后创建的文件)

我使用以下命令将内容从源目录复制到目标目录:

cp src/* dest

但是,在调用此命令后,当复制内容时,如果我在 src 目录中创建更多文件,这些新创建的文件不会复制到 dest 目录中。

您能解释一下背后的原因吗?是否可以在被解雇cp时对内容进行记账cp,然后根据该记账复制内容,从而忽略新创建的内容?

答案1

这是因为“src/*”不是由 cp 计算(展开为文件列表),而是由调用 cp 之前的 shell 计算。

答案2

安德烈亚斯是对的,src/*由外壳扩展。但是,即使您不指定通配符,cp仍然可能会跳过新创建的文件,因为会有一个竞争条件cp在访问目录的进程和您(实际上是代表您创建文件的进程)修改目录之间。

就实施而言GNU 连接就而言,它确实在实际复制之前获取了目录条目的列表(请参阅copy_dir函数这里)。

相关内容