Docker

如何在不知道最終名稱的情況下從 docker 容器複製特定目錄中的文件(glob 不工作)

  • May 3, 2019

我有一個目錄,其名稱的結尾發生了變化。我希望能夠複製此目錄中包含的文件。例如,我有這個路徑(我不知道目錄名後面是什麼-,這裡是這個例子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"

引用自:https://unix.stackexchange.com/questions/516710