如果目标存在,则使 cp 返回错误值

MvG*_*MvG 10 cp shell-script coreutils

cp如果目标文件已经存在,有没有办法让(来自 Linux 上的 GNU coreutils)返回一个非零值?
或者是否有任何其他常用的小实用程序并提供此功能?

这在 shell 脚本中很有用,可以自动复制文件而不会意外丢失任何内容,也无需用户交互。通过将副本与原件进行比较可以获得类似的结果,但我希望有一个更简单的解决方案。

h3r*_*ler 6

一些cp实现,包括 GNU cp,有一个非标准的-n开关来不破坏文件(如果它存在)。但 GNU无论如何都会cp返回0

您可以在 shell 脚本中使用 if 语句来测试文件是否存在,然后再将某些内容复制到该文件中:

if [ -e /path/to/file ]
  then 
   exit 1
  else
   cp file /path/to/file
fi
Run Code Online (Sandbox Code Playgroud)

或者如果你想要一个函数,你可以使用这样的东西:

function cpa(){ 
 if [ -e "$2" ]
  then 
   exit 1
  else 
   /bin/cp "$1" "$2"
  fi 
}
Run Code Online (Sandbox Code Playgroud)


Sté*_*las 1

你可以这样做:

(set -C &&  cat < /path/to/src > /path/to/dest)
Run Code Online (Sandbox Code Playgroud)

但它不会复制除文件内容之外的任何内容(不是像某些cp实现那样复制权限、所有权或稀疏性)。