我想cp一个目录,但我不想覆盖任何现有的文件,即使它们比复制的文件更老。我希望它完全非交互式,因为这将是Crontab Bash脚本的一部分。什么好主意吗?
摘自手册页:
-n, --no-clobber
do not overwrite an existing file (overrides a previous -i option)
例子:
cp -n myoldfile.txt mycopiedfile.txt
对于那些发现没有“n”选项的人(比如我在RedHat上),你可以使用cp -u只在源文件比现有的源文件更新(或者没有现有的源文件)时才写入文件。
[edit]正如评论中提到的,这将覆盖旧的文件,所以这不是OP想要的。使用ceving的答案。
考虑使用rsync。
rsync -a -v --ignore-existing src dst
根据注释,rsync -a -v src dst是不正确的,因为它将更新现有的文件。
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。
推荐文章
- bash:错误的替换
- 如何在bash中删除字符后的所有文本?
- 将主机端口转发到docker容器
- 如何配置git bash命令行补全?
- 你能在Linux下运行Xcode吗?
- Linux上有对应的WinSCP工具吗?
- /bin/sh: apt-get:未找到
- 如何检索给定相对的绝对路径
- 图形化对?
- 我如何能匹配一个字符串与正则表达式在Bash?
- 为什么cURL返回错误“(23)Failed writing body”?
- 在Unix shell中计算一列数字
- 在bash脚本中否定if条件
- 如何撤消“set -e”使bash立即退出,如果任何命令失败?
- 如何在docker映像的新容器中运行bash ?