Одна из возможностей - создать промежуточный файл, в котором перечислены все файлы, которые должны быть в сжатом файле. Мы можем использовать для этой цели модуль glob
:
import glob
from pathlib import Path
list_of_files = glob.glob("TOP_LEVEL_FOLDER/**/*.MY_EXTENSION",recursive=True)
with open("FILE_THAT_LISTS_ALL_FILES","w") as f:
for path_to_single_file in list_of_files:
path = Path(path_to_single_file).absolute()
f.write(str(path)+"\n")
glob.glob()
создает список всех соответствующих файлов. С параметром recursive=True
**
соответствует произвольным подкаталогам. Это означает, что эта команда рекурсивно просматривает все папки. С помощью команды Path(path_to_single_file).absolute()
мы гарантируем, что путь является абсолютным, а не относительным, что означает, что не имеет значения, перемещен ли промежуточный файл.
Второй шаг - использование tar
для создания сжатого файла. файл. С помощью опции -T
мы можем указать файл, содержащий список файлов, которые мы хотим сжать, то есть наш промежуточный файл.
tar -czvf FINAL_DIRECTORY_WITH_ALL_FILES.tar.gz -T FILE_THAT_LISTS_ALL_FILES