【问题标题】:Using xargs to copy files from local system into docker container使用 xargs 将文件从本地系统复制到 docker 容器中
【发布时间】:2020-09-22 18:57:20
【问题描述】:

我有一个包含大约 8000 张图像的文件夹,命名为 img_991_990_0_drawing.jpg.jpg。我想将本地系统中的所有文件复制到 docker 容器中。

操作系统:Ubuntu 18.04.2 LTS

码头工人:18.09.2

我尝试了sudo docker cp <source_path> <container_id>:<dest_path>,却遇到了sudo: unable to execute /usr/bin/docker: Argument list too long

所以我尝试用xargs复制所有文件find /data/projects/cad-detection/darknet/result_img/* | xargs /bin/cp 1f17d5044287:/home/dataturks/bazaar/uploads/2c91808274774ae60/

但我会得到不是目录错误

/bin/cp: target '/data/projects/cad-detection/darknet/result_img/img_2585_2581_0_drawing.jpg.jpg' is not a directory
/bin/cp: target '/data/projects/cad-detection/darknet/result_img/img_4076_4070_0_drawing.jpg.jpg' is not a directory
/bin/cp: target '/data/projects/cad-detection/darknet/result_img/img_5570_5560_0_drawing.jpg.jpg' is not a directory
/bin/cp: target '/data/projects/cad-detection/darknet/result_img/img_7052_7040_0_drawing.jpg.jpg' is not a directory
/bin/cp: target '/data/projects/cad-detection/darknet/result_img/img_999_998_0_drawing.jpg.jpg' is not a directory

我通常可以使用cp 来复制我的文件,所以我过去从未使用过xargs。我想我错过了一个选项。

如果您想知道我为什么要复制一堆图像而不是一个文件夹,我正在使用 DataTurks,我需要 /bazaar/uploads/2c91808274774ae60 中的文件才能通过 localhost 访问它们。

【问题讨论】:

  • 尝试将-l 传递给xargs。这行得通吗?
  • 你可以使用docker run -v绑定挂载选项在容器启动时注入整个目录吗?

标签: linux docker xargs


【解决方案1】:

我想你正在寻找:

find /data/projects/cad-detection/darknet/result_img/ -type f -print0 |
xargs -0 -iIMG docker cp IMG 1f17d5044287:/home/dataturks/bazaar/uploads/2c91808274774ae60/

首先,您在示例中使用的是/bin/cp,而不是docker cp

其次,当你有一个看起来像xargs <cmd> <arg1>xargs 命令时,这将产生<cmd> <arg1> arg arg arg ... 形式的命令。要获得docker cp 的正确语法,您需要使用-i 选项定义替换字符串,然后将其插入命令中的适当位置(因为目标目录需要是最后一个参数)。

为了正确起见,用于查找的-print0 和用于xargs-0 只是在那里;如果您的文件名包含空格,它们将允许操作。


作为替代方案,请考虑只使用tar

tar -C /data/projects/cad-detection/darknet/result_img/ -cf- . |
docker exec -i 1f17d5044287 tar -C /home/dataturks/bazaar/uploads/2c91808274774ae60/ -xf-

当然,这需要在您的容器中安装tar

【讨论】:

    猜你喜欢
    • 2020-07-18
    • 2018-02-28
    • 1970-01-01
    • 1970-01-01
    • 2018-05-26
    • 2018-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多