为什么这个复合命令在复制目录时会报错?

为什么这个复合命令在复制目录时会报错?

如果在一行中执行以下两个命令,如下所示:

rm -rf dir ; cp -r dir2 dir

它可能会返回 cp 无法创建目录dir/subdir:文件存在

但如果这两个命令分两行执行,则不会抛出错误。我只是想知道有什么区别,更重要的是,如何在一行中执行两个命令,其效果与两行完全相同......

编辑:我将其更改为cp -r dir2 dir.此外,内容dirdir2巨大的,通常为 4GB。

答案1

解决方案无需解释

我不是100%确定为什么这种情况发生了,尽管我怀疑这与 Bash 如何或何时将参数扩展到CP。然而,它很容易修复:只需添加 -a 标志即可。例如:

rm -rf dir; cp -a dir2 dir

这在我的系统上运行正常,并且没有报告任何错误。作为证明:

$ set -x; rm -rf dir; cp -a dir2 dir; ls
+ rm -rf dir
+ cp -a dir2 dir
dir  dir2

相关内容