Сжать все файлы определенного типа в папке, используя python и tar - PullRequest
0 голосов
/ 13 июля 2020

Как можно создать сжатый файл, включающий все файлы определенного расширения, сохранив при этом структуру папок исходного каталога?

1 Ответ

0 голосов
/ 13 июля 2020

Одна из возможностей - создать промежуточный файл, в котором перечислены все файлы, которые должны быть в сжатом файле. Мы можем использовать для этой цели модуль 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 
...