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