名前の末尾が変更されたディレクトリがあります。このディレクトリに含まれているファイルをコピーできるようにしたいです。たとえば、次のパスがあります(次にディレクトリ名が何であるかわかりません-
。例は次のとおりです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()を使用しました*
。 Globsはシェルによって拡張されますが、シェルはコンテナ内のファイルについては知りません。現在のシェル構成は、*
通常の文字であるかのようにファイル名に保存されます。これで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"