Linux如何复制但不能覆盖?

我的未来我决定 提交于 2020-03-10 22:14:36

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


#1楼

对于那些发现没有'n'选项的人(比如RedHat上的我),你可以使用cp -u只写一个文件,如果源比现有的更新(或者没有现有的) 。

[编辑]如评论中所述,这将覆盖旧文件,因此不是OP想要的。 使用ceving的答案。


#2楼

这将适用于RedHat:

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

更新不是覆盖是不同的。


#3楼

考虑使用rsync

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

根据评论rsync -a -v src dst不正确,因为它将更新现有文件。


#4楼

Alpine linux:以下答案仅适用于单个文件的情况:在alpine cp -n无法正常工作(以及false | cp -i ...也是如此)所以解决方案在我的情况下工作,我发现:

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

在上面的例子中,如果env.js文件不存在,那么我们将env.example.js复制到env.js


#5楼

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

  echo n | cp -vipr src/* dst
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!