Linux如何复制但不能覆盖?

我想要一个目录,但我不想覆盖任何现有的文件,即使它们比复制的文件旧。 而且我想完全不使用它,因为这将成为Crontab Bash脚本的一部分。 有任何想法吗?

从手册页采取:

 -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 src dst 

但是,如果不同,这将更新文件。


根据评论

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

将完全忽略现有的文件。

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

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

这将在RedHat上工作:

 false | cp -i source destination 2>/dev/null 

更新不是覆盖是不同的。

下面的答案只针对单个文件的情况:我使用linux的高山和cp -n不工作(和false | cp -i ...太)所以解决scheme在我的情况下工作,我发现是:

 if [ ! -f env.js ]; then cp env.example.js env.js; fi 

在上面的例子中,我们检查env.js文件是否存在,如果不是,我们将env.example.js复制为env.js