Answers:
摘自手册页:
-n, --no-clobber
do not overwrite an existing file (overrides a previous -i option)
例:
cp -n myoldfile.txt mycopiedfile.txt
cp -n source.txt destination.txt || true
cp -n
如果文件在Ubuntu 12.04上存在,则@galenandrew 不会错误退出。
--ignore-existing
标志以防止现有文件被覆盖。
rsync -a -v --ignore-existing <src> <dst>
确实是正确的答案,而不是cp -u
上面的答案。
对于发现没有'n'选项的人(例如RedHat上的我),您可以使用 cp -u
仅在源比现有源(或不存在现有源)新的情况下写文件。
[edit]如评论中所述,这将覆盖较旧的文件,所以这并不是OP想要的。为此,请使用ceving的答案。
-u
也实际上不适合其用途。
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
。