为什么它不起作用

为什么它不起作用

我有一个目录,其名称的末尾发生了变化。我希望能够复制此目录中包含的文件。例如,我有这个路径(我不知道后面的目录名是什么-,这里是这个例子ab):

/tmp/folder-ab/file

我想复制该文件。

这在 docker 之外工作:

cp /tmp/folder-*/file /other/path/ 

但我想从 docker 容器复制,所以我尝试了:

 docker cp $CONTAINERID:/tmp/[folder-]*/file /other/path/

我收到以下错误:

Error response from daemon: lstat
 /var/lib/docker/100000.100000/devicemapper/mnt/1ae07ffeda9e69465058ad01439543ab17a142d74668350b9185c1632cd7dec7/rootfs/tmp/folder-*/file:
 no such file or directory

答案1

为什么它不起作用

在您的代码中,docker cp $CONTAINERID:/tmp/[folder-]*/file /other/path您使用了 glob ( *)。 Glob 由 shell 扩展,但您的 shell 不知道容器中的文件。您当前的 shell 配置是*在文件名中保留 ,就好像只是一个普通字符一样。然后 Docker 告诉你…/folder-*/…找不到。

该怎么办

这些未经测试,请测试。

files="$(docker exec «container» bash -c "echo /folder-*/file")" #does not deal with spaces, etc.
do something with "$files"

或者

docker exec «container» bash -c 'for f in *; do printf "%s\0" "$f"; done' | \
xargs -0 --no-run-if-empty cp -t "/other/path"

相关内容