이름 끝이 변경된 디렉토리가 있습니다. 이 디렉토리에 포함된 파일을 복사할 수 있기를 원합니다. 예를 들어, 다음 경로가 있습니다(뒤에 디렉터리 이름이 무엇인지 모르겠습니다 -
. 예는 다음과 같습니다 ab
).
/tmp/folder-ab/file
이 파일을 복사하고 싶습니다.
이는 docker 외부에서 작동합니다.
cp /tmp/folder-*/file /other/path/
하지만 도커 컨테이너에서 복사하고 싶어서 다음을 시도했습니다.
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"