如何从Docker容器中仅复制指定扩展名(如pdf)的文件到服务器
Docker容器仅复制指定扩展名文件的实现方法
方法1:通过tar管道直接传输(推荐,兼容性最强,支持带空格的文件名)
不需要在容器或宿主机生成中间打包文件,直接通过标准流传输:
docker exec docker_session_name sh -c 'cd /root/mydir && tar cf - *.pdf' | tar xf -
- 命令解释:在容器内切换到目标目录后,将所有后缀为pdf的文件打包为tar流输出到标准输出,宿主机侧直接接收该流并解压到当前目录
- 如果需要匹配子目录下所有pdf文件,可修改通配符为
**/*.pdf,确保容器内shell开启globstar选项即可
方法2:循环遍历逐个复制(适合文件量少的场景)
先获取容器内所有目标文件路径,再逐个执行docker cp:
for f in $(docker exec docker_session_name ls /root/mydir/*.pdf); do docker cp docker_session_name:$f .; done
- 注意:该方法不适合文件名带空格/特殊字符的场景,可能出现路径解析错误
注意事项
- 请将命令中的
docker_session_name替换为你实际使用的容器名或容器ID - 如需复制其他扩展名的文件,只需将命令中的
*.pdf替换为对应通配符即可,比如*.docx、*.tar.gz
内容的提问来源于stack exchange,提问作者kiriloff
相关产品推荐
相关产品推荐

