Python glob模块不能使用多重选择?
在linux中,我的文件夹如下所示:Python glob模块不能使用多重选择?,python,linux,glob,Python,Linux,Glob,在linux中,我的文件夹如下所示: src ├── app │ ├── app.component.css │ ├── app.component.html │ ├── app.component.spec.ts │ ├── app.component.ts │ ├── app.module.ts │ ├── app-routing.module.ts │ ├── components │ │ ├── catalog-main │ │ │ ├──
src
├── app
│ ├── app.component.css
│ ├── app.component.html
│ ├── app.component.spec.ts
│ ├── app.component.ts
│ ├── app.module.ts
│ ├── app-routing.module.ts
│ ├── components
│ │ ├── catalog-main
│ │ │ ├── catalog-main.component.css
│ │ │ ├── catalog-main.component.html
│ │ │ ├── catalog-main.component.spec.ts
│ │ │ └── catalog-main.component.ts
│ │ ├── catalog-sidebar
│ │ │ ├── catalog-sidebar.component.css
│ │ │ ├── catalog-sidebar.component.html
│ │ │ ├── catalog-sidebar.component.spec.ts
│ │ │ └── catalog-sidebar.component.ts
│ │ └── top-bar
│ │ ├── top-bar.component.css
│ │ ├── top-bar.component_handy.css
│ │ ├── top-bar.component_handy.html
│ │ ├── top-bar.component.html
│ │ ├── top-bar.component.spec.ts
│ │ └── top-bar.component.ts
│ ├── icons-provider.module.ts
│ ├── pages
│ │ ├── login
│ │ │ ├── login.component.css
│ │ │ ├── login.component.html
│ │ │ ├── login.component.spec.ts
│ │ │ ├── login.component.ts
│ │ │ ├── login.module.ts
│ │ │ └── login-routing.module.ts
│ │ ├── monitor
│ │ │ ├── monitor.component.css
│ │ │ ├── monitor.component.html
│ │ │ ├── monitor.component.spec.ts
│ │ │ ├── monitor.component.ts
│ │ │ ├── monitor.module.ts
│ │ │ └── monitor-routing.module.ts
│ │ ├── monitor2
│ │ │ └── monitor2.module.ts
│ │ └── welcome
│ │ ├── welcome.component.css
│ │ ├── welcome.component.html
│ │ ├── welcome.component.ts
│ │ ├── welcome.module.ts
│ │ └── welcome-routing.module.ts
│ ├── reducers
│ │ └── index.ts
│ └── store
│ ├── catalog.actions.ts
│ ├── catalog.reducer.ts
│ └── userinfo.ts
├── assets
├── environments
│ ├── environment.prod.ts
│ └── environment.ts
├── favicon.ico
├── index.html
├── main.ts
├── polyfills.ts
├── styles.css
├── test.ts
└── theme.less
我使用此命令输出29个文件:llsrc/***.ts | wc-l
我使用这个命令输出32个文件:
llsrc/{**,}/*.ts | wc-l
,新文件是src/main.ts、src/test.ts、src/polyfills.ts,它们直接位于src文件夹中
但在python3中,我使用
glob.glob(“src/***/.ts”)
输出所有32个文件,我使用
glob.glob(“src/{**,}/*.ts”)
输出所有0个文件
那么,哪一种是标准的glob语法呢。这两种语法都不允许
**是一种扩展,由zsh发明并首次普及。Bash和其他一些人复制了它,通常做了一些稍微不兼容的事情。Bash和Python都复制了它,但在与其他globbing语法交互时选择了稍微不同的行为
这是有道理的:毕竟,虽然glob(3)是一个POSIX函数,精确地指定并按照指定的方式实现,但zsh只是一个角色模型,可以随意偏离。我们必须偏离,因为
哪种是标准的glob语法
因为您标记了linux
,所以我假设您使用bash
。Bash的nostandard(即,它不在posix中)扩展与globbing无关
委员会:
首先扩展到:
ll src/**/*.ts src/*.ts | wc -l
在执行大括号扩展时使用bash。接下来是全球化扩张。Python在解析glob参数时不进行任何shell扩展,因此Python搜索名为{
并以、
和}
作为字符结尾的文件/目录,因为它没有找到任何文件/目录,所以计数为0
所以你不是在比较globbing,你是在比较globbing和shell扩展,而只是比较globbing。您可以将命令与禁用大括号扩展的bash进行比较set+B
,或者使用另一个没有大括号扩展的shell,如busybox
ll src/**/*.ts src/*.ts | wc -l