如果 cp 的目标路径是一个目录,我如何避免错误地在该目录中创建文件?

Max*_*xpm 5 cp files

我的理解cp src dest是:

  1. 如果src是一个文件并且dest不存在,但它的父目录存在,dest则创建。
  2. 如果src是一个文件并且dest是一个文件,dest则被src.
  3. 如果src是文件并且dest是目录,dest/src则创建。

我试图避免情况#3。如果我编写一个脚本,假设它dest 不是一个目录,但在运行时结果是这样,我不想cp将文件放在错误的位置并继续静默。

相反,我希望它:

  • 删除整个dest目录并将其替换为所需的文件。
  • 不做任何事情就出错。

我也更喜欢这种情况以原子方式发生。使用单独的命令test -d来检查是否dest是目录会为 TOCTTOU 问题提供机会。

这可以做到cp吗?如果没有,是否可以使用任何其他类似的无处不在的命令来完成?

我对便携式解决方案和依赖非标准扩展的解决方案都感兴趣,只要它们相当普遍。

Edu*_*ani 6

重定向会做到这一点。它表现为cp's -T, --no-target-directory(如果dst是目录,则退出并出错):

$ cat src > dst
Run Code Online (Sandbox Code Playgroud)