如果在一行中执行以下两个命令,如下所示:
rm -rf dir ; cp -r dir2 dir
它可能会返回 cp 无法创建目录dir/subdir
:文件存在
但如果这两个命令分两行执行,则不会抛出错误。我只是想知道有什么区别,更重要的是,如何在一行中执行两个命令,其效果与两行完全相同......
编辑:我将其更改为cp -r dir2 dir
.此外,内容dir
是dir2
巨大的,通常为 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