В современном мире часто возникает необходимость собрать большой набор файлов в один архив, но делать это «все сразу» бывает неудобно или даже невозможно․ Причины могут быть разными:
- Ограниченный объём свободного места на диске;
- Необходимость регулярно обновлять архив новыми данными;
- Требования к резервному копированию (инкрементные бэкапы);
- Сетевые ограничения при передаче файлов․
В этой статье мы подробно разберём, как добавлять файлы в архив частями на разных платформах и с помощью самых популярных утилит: tar, zip, 7z и графических программ․
Содержание
- Что значит «добавить в архив частями»?
- Работа с
tar(Linux/Unix/macOS) - Работа с
zip(кроссплатформенно) - Работа с
7z(7‑Zip) - Графические программы
- Инкрементные архивы и резервные копии
- Лучшие практики и типичные ошибки
Что значит «добавить в архив частями»?
Термин добавление в архив частями (англ․ append to archive) подразумевает:
- Создание архива, если он ещё не существует, и последующее добавление новых файлов или каталогов без пересоздания уже упакованных данных․
- Возможность разделения большого архива на несколько «томов» (split) – полезно, когда размер архива превышает лимит файловой системы или требуется загрузка по частям․
- Поддержку инкрементного (incremental) и дифференциального (differential) обновления, когда в архив попадают только изменённые файлы․
Для большинства форматов (ZIP, TAR, 7Z) такие операции реализованы штатно, однако синтаксис команд различается․
Работа с tar (Linux/Unix/macOS)
Создание базового архива
tar -cvf backup․tar /path/to/first_folder Опции:
- -c – создать архив;
- -v – выводить процесс в консоль (verbose);
- -f – имя файла архива․
Добавление новых файлов в уже существующий архив
tar -rvf backup․tar /path/to/second_folder/file․txt Опция -r (append) позволяет «пришить» новые файлы к концу архива․ Важно помнить, что tar не поддерживает добавление в сжатый архив (․tar․gz, ․tar․bz2 и т․п․)․ Поэтому если нужен сжатый архив, сначала создаём обычный ․tar, а затем сжимаем:
# Шаг 1 – добавить файлы
tar -rvf backup․tar new_folder/
gzip -9 backup․tar # получаем backup․tar․gz
Инкрементные архивы с tar
Для создания инкрементных бэкапов удобно использовать опцию —listed-incremental (или её короткую форму -g)․
# Первый (полный) бэкап
tar -cvpf full_backup․tar -g snapshot․file /important/data
tar -cvpf inc_backup_01․tar -g snapshot․file /important/data
Файл snapshot․file хранит метаданные о предыдущем состоянии и позволяет tar определить, какие файлы изменились․
Разделение (split) большого архива на части
tar -cvf ⎼ /big/data | split -b 2G ⎼ backup_part_ Здесь tar -cvf - выводит архив в stdout, а split разбивает поток на файлы по 2 ГБ с префиксом backup_part_․ Для восстановления:
cat backup_part_* | tar -xvf - Работа с zip (кроссплатформенно)
Создание и добавление файлов
Команда zip умеет как создавать архив, так и добавлять в него новые файлы без пересборки:
# Создать архив
zip -r archive․zip /first_folder
zip -r archive․zip /second_folder
Опция -r (recursive) рекурсивно упаковывает каталоги․ Если архив уже существует, zip просто добавит новые элементы․
Добавление файлов без пересжатия (store)
Если нужно добавить файлы без их повторного сжатия (например, уже сжатые файлы), используем -0 (store):
zip -0 archive․zip large_video․mp4 Инкрементный режим
Для обновления только изменённых файлов удобно применять опцию -u (update):
zip -ru archive․zip /data/to/backup Команда проверит даты изменения файлов и заменит только те, которые новее․
Разделение ZIP‑архива на тома
Утилита zip поддерживает создание многотомных архивов через параметр -s (split size):
zip -r -s 1g archive_split․zip /big_folder Получится набор файлов archive_split․z01, archive_split․z02, … и финальный archive_split;zip․ Для распаковки достаточно запустить:
unzip archive_split․zip Работа с 7z (7‑Zip)
Основные команды
# Создать архив
7z a archive․7z /first_folder
7z a archive․7z /second_folder/file․txt
Команда a (add) автоматически добавляет файлы, если архив уже существует․
Инкрементный (обновляющий) режим
Для обновления только изменённых файлов используем параметр -u:
7z u archive․7z /data/to/backup Создание многотомных архивов
7z a -v2g -mx=9 archive_multi․7z /big_folder Опция -v2g разбивает архив на тома по 2 ГБ, -mx=9 задаёт максимальный уровень сжатия․ Файлы получатся как archive_multi․7z․001, archive_multi․7z․002 и т․д․
Добавление в уже разбитый архив
Если архив уже разбит, новые файлы можно добавить так же, как и в обычный архив:
7z a archive_multi․7z /new_data 7‑Zip автоматически перераспределит данные по томам, сохранив их размер․
Графические программы
Не все пользователи комфортно работают в терминале․ Ниже перечислены популярные GUI‑утилиты, поддерживающие добавление в архив частями:
- WinRAR – позволяет в диалоговом окне выбрать «Добавить в архив», указать «Разделить на тома» и в дальнейшем нажимать «Добавить файлы»․
- 7‑Zip (Windows, Linux через
p7zip) – в контекстном меню файлов есть пункт «Добавить к архиву», где можно задать размер тома․ - PeaZip – открытый кроссплатформенный архиватор с поддержкой почти всех форматов и опций «инкрементное добавление»․
- Keka (macOS) – простое приложение, позволяющее добавлять новые файлы в существующий
․zipили․7zархив․
Во всех этих программах процесс выглядит одинаково:
- Открыть существующий архив․
- Перетащить новые файлы в окно программы или воспользоваться кнопкой «Добавить»․
- Подтвердить действие – программа сама обновит архив без полной пересборки․
Инкрементные архивы и резервные копии
Если задача – регулярное резервное копирование, лучше использовать специальные инструменты, которые автоматически создают инкрементные архивы:
- rsync +
tar– скрипт копирует изменённые файлы в отдельный каталог, а затем упаковывает их․ - Duplicity – делает зашифрованные инкрементные бэкапы в облако, используя
gpgиtar․ - Bacula, Restic, Vorta – профессиональные решения с поддержкой дедупликации․
Пример простого скрипта на Bash, создающего ежедневный инкрементный архив:
#!/bin/bash
SRC="/home/user/data"
DEST="/backup"
DATE=$(date +%Y-%m-%d)
SNAPSHOT="${DEST}/snapshot․snar"
if [ $(date +%u) -eq 1 ]; then
tar -cvpf "${DEST}/full_${DATE}․tar" -g "$SNAPSHOT" "$SRC"
else
tar -cvpf "${DEST}/inc_${DATE}․tar" -g "$SNAPSHOT" "$SRC"
fi
Скрипт использует один файл‑снимок snapshot․snar, благодаря чему каждый последующий архив содержит только изменения․
Лучшие практики и типичные ошибки
Планируйте структуру архива заранее
- Если планируется частое добавление, лучше использовать форматы, поддерживающие многотомность (
zip,7z)․ - Не смешивайте сжатые и несжатые файлы в
tar․gz– это усложняет последующее добавление․
Не забывайте про проверку целостности
После каждого добавления рекомендуется проверять архив:
# tar
tar -tvf archive․tar
zip -T archive․zip
7z t archive․7z
Храните метаданные инкрементных бэкапов
Файлы‑снимки (snapshot․snar, ․tar․gz с опцией --listed-incremental) необходимо сохранять в надёжном месте, иначе последующие инкременты будут недоступны․
Остерегайтесь «перезаписи» архива
Команды tar -c и zip -r при указании уже существующего имени файла могут перезаписать архив․ Всегда проверяйте, что используете -a (append) или -u (update), если хотите добавить․
Учтите ограничения файловой системы
Некоторые файловые системы (FAT32, exFAT) ограничивают размер отдельного файла (4 ГБ для FAT32)․ В таких случаях обязательно разбивайте архив на тома․
Добавление файлов в архив частями – это удобный и часто необходимый процесс, который позволяет экономить место, ускорять резервное копирование и обходить ограничения сетей и файловых систем․ В зависимости от ваших задач вы можете выбрать:
- Классический
tarдля Unix‑подобных систем (особенно если нужен простой потоковый архив)․ - Универсальный
zipдля кроссплатформенной совместимости и простоты использования․ - Мощный
7zдля максимального сжатия и гибкой многотомности․ - Графические программы, если вы предпочитаете работать в визуальном интерфейсе․
Следуя рекомендациям из раздела Лучшие практики, вы избежите типичных ошибок и сможете поддерживать свои архивы в актуальном и надёжном состоянии․
Удачной работы с архивами!