我想cp一个目录,但我不想覆盖任何现有的文件,即使它们比复制的文件更老。我希望它完全非交互式,因为这将是Crontab Bash脚本的一部分。什么好主意吗?


当前回答

考虑使用rsync。

rsync -a -v --ignore-existing src dst

根据注释,rsync -a -v src dst是不正确的,因为它将更新现有的文件。

其他回答

对于那些发现没有“n”选项的人(比如我在RedHat上),你可以使用cp -u只在源文件比现有的源文件更新(或者没有现有的源文件)时才写入文件。

[edit]正如评论中提到的,这将覆盖旧的文件,所以这不是OP想要的。使用ceving的答案。

摘自手册页:

-n, --no-clobber
              do not overwrite an existing file (overrides a previous -i option)

例子:

cp -n myoldfile.txt mycopiedfile.txt
cp -n

是你想要的。请参阅手册页。

考虑使用rsync。

rsync -a -v --ignore-existing src dst

根据注释,rsync -a -v src dst是不正确的,因为它将更新现有的文件。

某些版本的cp没有——no-clobber选项。在这种情况下:

  echo n | cp -vipr src/* dst