在Windows 10(cmd)中,我试图从子文件夹中复制文件,该子文件夹的名称中包含空格字符。
首先,我尝试使用引号:
FROM jfloff/alpine-python:2.7
COPY "Folder 1/File.txt" "Dir 1"
错误消息:
无法处理“ \”文件夹“ :查找匹配的双引号时语句意外结束
“ JSON”格式(跳过第一行):
COPY ["Folder 1/File.txt" "Dir 1"]
错误消息:
无法处理“ [\”文件夹“ :查找匹配的双引号时语句意外结束
尝试使用单个反斜杠进行转义:
COPY "Folder\ 1/File.txt" "Dir\ 1"
错误消息:
无法处理“ \”文件夹\\“ :查找匹配的双引号时语句意外结束
试图用双反斜杠转义:
COPY "Folder\\ 1/File.txt" "Dir\\ 1"
错误消息:
无法处理“ \”文件夹\\\\“ :查找匹配的双引号时语句意外结束
还尝试了使用%20 代替空格的建议:
COPY ["Folder%201/File.txt" "Dir%201"]
错误消息:
复制失败:没有源文件
转义符替换:
# escape=`
COPY "Folder` 1/File.txt" "Dir 1"
错误消息:
无法处理“ \”文件夹`“ :查找匹配的双引号时语句意外结束
相同,但没有引号:
#escape=`
COPY Folder` 1/File.txt Dir` 1
错误消息:
复制失败:stat / var / lib / docker / tmp / docker-builder082039614 / 文件夹:没有此类文件或目录
使用 tar 归档文件打包/解压缩的方法(我对该想法不满意)。
应该有可能,不是吗?
答案 0 :(得分:1)
也许您可以使用ARG
来帮助您,
Dockerfile:
FROM jfloff/alpine-python:2.7
ARG src="Folder 1/File.txt"
ARG target="Dir 1/"
COPY ${src} ${target}
顺便说一句,如果您确实想将其视为文件夹,则必须在/
的末尾添加一个Dir 1
。
而且,JSON格式也可以,只要您错过,
,它应该是:
FROM jfloff/alpine-python:2.7
COPY ["Folder 1/File.txt", "Dir 1/"]
更新您的评论:
在official guide中,它说:
复制包含特殊字符(例如[和])的文件或目录时,需要遵循Golang规则转义那些路径,以防止将它们视为匹配模式。
因此,对于您的情况,应为:
FROM jfloff/alpine-python:2.7
ARG src="[[]Folder 1]/__SLIM_TEMPLATE.mm"
ARG target="[Folder 1]/"
COPY ${src} ${target}
或者:
FROM jfloff/alpine-python:2.7
COPY ["[[]Folder 1]/__SLIM_TEMPLATE.mm", "[Folder 1]/"]
答案 1 :(得分:1)
同意从 docker 获取具有特殊字符的文件很烦人, 有过类似的经历,经过数小时的尝试和错误,我想出了这个简单的解决方案,从那时起我就开始使用了。
tar/zip 文件,然后轻松“docker cp”它们,而不必担心数十个 []'"..
容器机器中的 tar 文件:
压缩
或 解压
然后将它们复制到 Windows 计算机的本地目录中。
在windows下打开cmd 运行
检查文件是否已传输到 d:/TARGETDIR/