我的理解cp src dest是:
src是一个文件并且dest不存在,但它的父目录存在,dest则创建。src是一个文件并且dest是一个文件,dest则被src.src是文件并且dest是目录,dest/src则创建。我试图避免情况#3。如果我编写一个脚本,假设它dest 不是一个目录,但在运行时结果是这样,我不想cp将文件放在错误的位置并继续静默。
相反,我希望它:
dest目录并将其替换为所需的文件。我也更喜欢这种情况以原子方式发生。使用单独的命令test -d来检查是否dest是目录会为 TOCTTOU 问题提供机会。
这可以做到cp吗?如果没有,是否可以使用任何其他类似的无处不在的命令来完成?
我对便携式解决方案和依赖非标准扩展的解决方案都感兴趣,只要它们相当普遍。
重定向会做到这一点。它表现为cp's -T, --no-target-directory(如果dst是目录,则退出并出错):
$ cat src > dst
Run Code Online (Sandbox Code Playgroud)