docker - 如何使用`docker cp`来`--no-clobber`?从 Docker 容器复制文件,但如果目标已存在则不覆盖
问题描述
我想从 Docker 容器中复制一个文件:
docker cp MY_CONTAINER_NAME:/path/to/file /destination/path
但是,docker cp
似乎没有--no-clobber
像常规那样的选项cp
。那么,如果文件已经存在,我如何在不覆盖目标的情况下复制文件呢?
在运行之前简单地检查目的地的存在docker cp
不是原子的并且容易受到竞争条件的影响。
解决方案
我会使用以下脚本:
#!/bin/bash
set -o noclobber
{ > /destination/path ; } &> /dev/null
if [ $? -ne 0 ] ; then
echo 'already exists!'
exit 1
fi
docker cp MY_CONTAINER_NAME:/path/to/file /destination/path
这noclobber
将防止重定向输出时意外覆盖。如果文件已经存在,重定向将返回非零退出代码。
编辑:
我发现这个 SO 答案使用完全相同的解决方案:atomic create file if not exists from bash script
也许其他评论会有所帮助。
推荐阅读
- scala - Scala相当于Java`Class`类?
- c - C,char* array[][] 的问题
- swiftui - 文本不适合时 SWIFTUI 选取框
- javascript - 上一次完成后的 ReactJS 调用函数
- r - ggplot2 - 无论 y 轴的范围如何,都设置中断
- .htaccess - .htaccess 中的 AuthName 未显示在 Chrome 中
- symfony4 - Knp_paginator 模板问题
- react-native - React Native Appium 找不到样式位置视图的自动化 ID:iOS 中的绝对
- angular - Angular8 TypeError:无法读取未定义的属性“forEach”
- clojure - 如何引用它存在的映射中的键?