Azcopy cp命令--include-regex参数未匹配文件问题排查
问题原因及解决办法
核心问题:混淆正则表达式与Shell通配符语法
你的正则*/testA/*无法匹配目标文件,主要有两个关键原因:
- Azcopy的
--include-regex采用标准正则语法,而非Shell通配符:正则里单独的*属于无效语法(*在正则中表示匹配前一个字符零次或多次,而非任意字符),你误将其当成了Shell环境中的通配符使用。 - Blob路径匹配基准是容器根目录:目标文件在容器中的实际路径是
data/testA/2/file.txt(无开头斜杠),你的正则没有正确匹配路径前缀部分。
解决方法
方法1:使用正确的正则表达式
将--include-regex的参数改为匹配任意包含testA/的Blob路径:
azcopy cp "$https://mystorageaccount.blob.core.windows.net/mycontainer?sv=xxxx&ss=xxxx&srt=xxxx&sp=xxxx&se=xxxx&st=xxxx&spr=xxxx&sig=xxxx" /var/data/ --include-regex ".*testA/.*"
.*:正则中表示匹配任意字符(包括路径分隔符/)零次或多次,能覆盖testA前面的任意层级路径。- 若要精确匹配
testA作为独立文件夹(避免匹配类似datatestA/的路径),可改用:".*/testA/.*"
方法2:改用--include-path参数(更直观)
如果不需要正则的复杂匹配逻辑,推荐使用支持Shell通配符的--include-path参数,语法更符合你的预期:
azcopy cp "$https://mystorageaccount.blob.core.windows.net/mycontainer?sv=xxxx&ss=xxxx&srt=xxxx&sp=xxxx&se=xxxx&st=xxxx&spr=xxxx&sig=xxxx" /var/data/ --include-path "*/testA/*"
这里的*就是你原本预期的通配符,能匹配任意层级下的testA文件夹及其所有内容。
内容的提问来源于stack exchange,提问作者quincy783
相关产品推荐
相关产品推荐

