匹配文件夹中的所有文件,而忽略其中的一个文件夹

时间:2019-04-20 15:33:12

标签: match glob

我具有以下目录结构:

root
├─ files
│  ├─ folder1
│  │  ├─ file1.js
│  |  └─ file2.js
│  ├─ folder2
│  │  └─ file3.js
│  ├─ file4.js
|  └─ file5.js
└─ config.js

如何匹配file(及其子目录)中除folder1中的文件(在这种情况下为file3.jsfile4.js和{{1 }}? 我知道我可以用以下内容排除file5.jsfolder1,但这只匹配files/!(folder1)/*.js

2 个答案:

答案 0 :(得分:1)

由于我对glob不太熟悉,可能有一种更优雅的方法来执行此操作,但是我认为这会满足您的要求。

import glob

exclude_pattern = ['folder1']
file_list = glob.glob('./files/**/*',  recursive=True)

for pattern in exclude_pattern:
    exclude_patternmatch = list(filter(lambda x: pattern in x, file_list))
    for item in exclude_patternmatch:
        file_list.remove(item)

print(file_list)

输出:

['./files/file6.js', './files/file5.js', './files/folder2/file3.js', './files/folder2/file4.js']

答案 1 :(得分:1)

尝试**/files/{*.js,!(folder1)*/*.js}。您可以使用globster.xyz

进行测试