Для краткого сохранения иерархии папок в родительском каталоге для архивации:
import glob
import zipfile
with zipfile.ZipFile(fp_zip, "w", zipfile.ZIP_DEFLATED) as zipf:
for fp in glob(os.path.join(parent, "**/*")):
base = os.path.commonpath([parent, fp])
zipf.write(fp, arcname=fp.replace(base, ""))
Если вы хотите, вы можете изменить это, чтобы использовать pathlib
для перемещения по файлу .
Относительно FindBugFilter ,
(на всякий случай) Вы уверены, что рассматриваете каталоги скомпилированных файлов классов, а не sourcePath? (как указано в этом ответе SO ).
Из раздела Соответствие имени элемента Java :
Если атрибут имени класса, метода или поля начинается с символа ~ остальное содержимое атрибута интерпретируется как регулярное выражение Java , которое сопоставляется с именами рассматриваемого элемента Java.
Будет ли следующее регулярное выражение более точным?
<Class name="~.*\._.*"/>
<Class name="~.*?EJS.*"/>
«. * \ ._. *
» вместо «. * \. ^ _ *
» поскольку предполагается, что привязка будет соответствовать началу строки, к которой применяется шаблон регулярного выражения.
". *? EJS. *
" вместо ". * EJS *
"потому что квантор ?
делает сопоставление ленивым, избегая" съедать "EJS. (Плюс « S *
» означает «0 или n S», что здесь не помогает)