`**/*.{mp4,avi}` not working
Closed this issue · 2 comments
bbtfr commented
之前 megfile 支持上面这种带 {}
的语法,但之后的某个版本弄挂了,可能挂了有一段时间了
看了下代码,整个故事似乎是:
- https://github.com/megvii-research/megfile/blob/main/megfile/smart.py#L814 这里对 protocol 做了一次 group by,用到了 ungloblize / globlize;
**/*.{mp4,avi}
经过上述翻译后会变成**/{*.mp4,*.avi}
- https://github.com/megvii-research/megfile/blob/main/megfile/lib/fnmatch.py#L74 目前 translate 实现会认为
{}
内部的是字面值,**/{*.mp4,*.avi}
表示名为 *.mp4 或 *.avi 的文件
修复方案:
- 最挫但最简单的法子:_group_glob 特判一下如果 group 后的 list 长度为 1,即只有一个 propocol 的时候返回原字符串,但这种解法只能算 workaround,多 propocol 的 glob 表达式还是不对
- 修 ungloblize / globlize,感觉很难,甚至没想到怎么修
- 修 translate,认为
{}
内部不是字面值,可以支持例如 * ? 等符号,但暂时不支持嵌套使用{}
了要不太复杂
建议通过 3 来修,我开个 PR ?
LoveEatCandy commented
👌 麻烦帮修一下,最好加点 test
LoveEatCandy commented
3.1.4 已经发版了