我想要cp
一个目录,但我不想覆盖任何现有文件,即使它们比复制的文件旧。我想做到完全非交互式,因为这将是 Crontab Bash 脚本的一部分。有任何想法吗?
问问题
403061 次
8 回答
701
取自手册页:
-n, --no-clobber
do not overwrite an existing file (overrides a previous -i option)
例子:
cp -n myoldfile.txt mycopiedfile.txt
于 2012-02-22T10:12:11.933 回答
123
于 2014-08-16T17:45:51.677 回答
55
cp -n
是你想要的。请参阅手册页。
于 2012-02-22T10:11:25.880 回答
37
对于那些发现没有“n”选项的人(比如我在 RedHat 上),您可以使用cp -u
仅在源比现有源更新(或没有现有源)时写入文件。
[编辑] 正如评论中提到的,这将覆盖旧文件,所以并不是 OP 想要的。使用 ceving 的答案。
于 2013-06-04T16:45:25.763 回答
36
这将适用于 RedHat:
false | cp -i source destination 2>/dev/null
更新和不覆盖是不同的。
于 2013-11-15T09:20:21.240 回答
13
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
.
于 2017-05-11T19:55:11.640 回答
5
某些版本的 cp 没有--no-clobber选项。在这种情况下:
echo n | cp -vipr src/* dst
于 2019-07-22T20:47:42.353 回答
-2
这对我有用 cp -i src 目标
于 2020-08-27T04:24:29.217 回答