我想cp一个目录,但我不想覆盖任何现有的文件,即使它们比复制的文件更老。我希望它完全非交互式,因为这将是Crontab Bash脚本的一部分。什么好主意吗?
当前回答
某些版本的cp没有——no-clobber选项。在这种情况下:
echo n | cp -vipr src/* dst
其他回答
摘自手册页:
-n, --no-clobber
do not overwrite an existing file (overrides a previous -i option)
例子:
cp -n myoldfile.txt mycopiedfile.txt
这对我很有用 是n | cp -i SRC dest
这将在RedHat工作:
false | cp -i source destination 2>/dev/null
更新和不覆盖是另一回事。
Alpine linux:下面的答案只适用于单个文件的情况:在Alpine cp -n不工作(和错误| cp -i…所以解决方案在我的情况下,我发现是:
if [ ! -f env.js ]; then cp env.example.js env.js; fi
在上面的例子中,如果env.js文件不存在,那么我们将env.example.js复制到env.js。
对于那些发现没有“n”选项的人(比如我在RedHat上),你可以使用cp -u只在源文件比现有的源文件更新(或者没有现有的源文件)时才写入文件。
[edit]正如评论中提到的,这将覆盖旧的文件,所以这不是OP想要的。使用ceving的答案。
推荐文章
- 检查bash变量是否等于0
- 在tmux中保持窗口名称固定
- 只使用md5sum获取哈希值(没有文件名)
- 如何生成一个核心转储在Linux上的分段错误?
- 在Python中如何在Linux和Windows中使用“/”(目录分隔符)?
- 在Bash中测试非零长度字符串:[-n "$var"]或["$var"]
- 如何删除超过X小时的文件
- 如何创建Bash别名?
- 将所有变量从一个shell脚本传递到另一个?
- 如何在Apache服务器上自动将HTTP重定向到HTTPS ?
- 如何删除shell脚本中文件名的扩展名?
- 使用xargs调用shell函数
- 如何限制从grep返回的结果的数量?
- 'find -exec'是Linux中的shell函数
- 将值从管道读入shell变量