我想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
来源:oschina
链接:https://my.oschina.net/stackoom/blog/3191255