Сопоставить все файлы, находящиеся внутри папки, и игнорировать одну папку внутри

#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']