#match #glob
#сопоставить #глобальный
Вопрос:
У меня следующая структура каталогов:
root
├─ files
│ ├─ folder1
│ │ ├─ file1.js
│ | └─ file2.js
│ ├─ folder2
│ │ └─ file3.js
│ ├─ file4.js
| └─ file5.js
└─ config.js
Как я могу сопоставить все файлы внутри file
(и подкаталоги), кроме файлов, которые находятся в folder1
, в данном случае file3.js
, file4.js
и file5.js
?
Я знаю, что мог бы исключить folder1
с помощью следующего: files/!(folder1)/*.js
, но это только соответствует file3.js
.
Ответ №1:
Попробуйте **/files/{*.js,!(folder1)*/*.js}
. Вы можете протестировать с помощью globster.xyz
Ответ №2:
Вероятно, есть более элегантный способ сделать это, поскольку я не слишком знаком с 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']