我想要cp一个目录,但我不想覆盖任何现有的文件,即使它们比复制的文件旧.而且我想完全不受欢迎,因为这将是Crontab Bash脚本的一部分.有任何想法吗?
hov*_*yan 534
摘自手册页:
-n, --no-clobber
do not overwrite an existing file (overrides a previous -i option)
Run Code Online (Sandbox Code Playgroud)
例:
cp -n myoldfile.txt mycopiedfile.txt
Run Code Online (Sandbox Code Playgroud)
Han*_*zel 82
考虑使用rsync.
rsync -a -v --ignore-existing src dst
Run Code Online (Sandbox Code Playgroud)
根据评论rsync -a -v src dst不正确,因为它将更新现有文件.
小智 49
cp -n
Run Code Online (Sandbox Code Playgroud)
是你想要的.请参见手册页.
Gri*_*... 32
对于发现没有'n'选项的人(比如我在RedHat上),cp -u如果源比现有源更新(或者没有现有源),则可以使用仅写入文件.
[编辑]如评论中所述,这将覆盖旧文件,因此不是OP想要的.使用ceving的答案.
cev*_*ing 30
这将适用于RedHat:
false | cp -i source destination 2>/dev/null
Run Code Online (Sandbox Code Playgroud)
更新而不是覆盖是不同的.
Alpine linux:以下答案仅针对单个文件的情况:在alpine中cp -n不起作用(也是false | cp -i ...如此)所以解决方案在我的情况下工作,我发现:
if [ ! -f env.js ]; then cp env.example.js env.js; fi
Run Code Online (Sandbox Code Playgroud)
在上面的例子中,我们检查env.js文件是否存在,如果不存在则复制env.example.js为env.js.
某些版本的 cp 没有--no-clobber选项。在这种情况下:
echo n | cp -vipr src/* dst
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
288708 次 |
| 最近记录: |