1

У меня есть большая (~ 100 ГБ несжатая) коллекция файлов, которые я хочу сохранить в блоках <2 ГБ для резервного копирования в системе хранения на базе Windows Server. Я использую Ubuntu на своей рабочей станции.

Наборы данных собираются в подкаталогах с многоуровневой структурой. (например, каталог A содержит три подкаталога 1, 2, 3, каждый из которых может содержать 30 или более подкаталогов, каждый из которых содержит 6 или 7 файлов с одинаковыми именами (в каждом подкаталоге))

tar сжимает и архивирует мои данные, но если я хочу получить доступ к отдельным разделам, это довольно болезненно. Это также медленно, и если я использую сжатие, мне нужно распаковать, прежде чем я могу извлечь отдельные каталоги (afaik)

Это будет использовать что-то вроде:

tar -cf mySuperStructure.tar;
split -b 1024M mySuperStructure.tar mySuperStructure.tar.part- ;
gzip mySuperStructure.tar.part-* ;

или аналогичный - я знаю, что tar имеет опцию -z , но я думаю, что это может быть проблематично при использовании split? Точно так же, я считаю, что есть возможность разделить архивы tar , возможно, с помощью сжатия, но файлы разделяются бесполезными способами (возможно, это лучшее решение, если так - пожалуйста, посоветуйте)

Кроме того, dar сжимает файл по уровню файла, позволяя параметру -m указать минимальный размер. Это было бы идеально, но для большого количества файлов требуется много времени, чтобы сжать и заархивировать настройки. Каталоги самого низкого уровня имеют размер ~ 70 МБ, поэтому их сжатие будет полезно (и я подозреваю, что быстрее, так как меньше операций сжатия?)

Можно ли указать сжатие подкаталогов по отдельности, без сжатия отдельных файлов? Это было бы быстрее, если бы я мог?

Ручная реализация может выглядеть так:

for levelA in $(ls); do
cd levelA;
    for subdirectoryCase in $(ls); do
    cd subdirectoryCase;
        for subdirSmall in $(ls); do
        gzip subdirSmall;
        done
    cd ..;
    tar -cf $subdirectoryCase.tar $subdirectoryCase;
    gzip $subdirectoryCase.tar;
    done
cd ..;
tar -cf $levelA.tar $levelA;
gzip $levelA.tar;
done

tar -cf superStructure.tar levelA1.tar levelA2.tar levelA3.tar;
gzip superStructure.tar;

но кажется, что это может быть микроуправление до ужасного уровня (но это все еще может быть лучше, я не знаю?) dar может быть заменен tar во всем, и split может использоваться, возможно, до последнего gzip , предполагая, что более ранние файлы gzip были достаточно малы (чего не будет, но, по-видимому, возможно иметь дело с подобным образом)

0