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