Docker
如何在不知道最終名稱的情況下從 docker 容器複製特定目錄中的文件(glob 不工作)
我有一個目錄,其名稱的結尾發生了變化。我希望能夠複製此目錄中包含的文件。例如,我有這個路徑(我不知道目錄名後面是什麼
-
,這裡是這個例子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
為什麼它不起作用
在您的程式碼中
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"