У меня есть скрипт, который архивирует файлы из папки. Я хочу убедиться, что размер заархивированного файла не превышает 10 МБ. Если размер больше 10 МБ, должен быть создан другой ZIP-файл.
Есть ли какая-нибудь команда (или другой метод), которую можно использовать для этого?
Вы можете использовать "разделить архив"функциональность"застегивать"сам использует"--split-size"вариант.
Из справочной страницы "zip" ("man zip
"):
(...)
Одно из применений разделенных архивов - это хранение большого архива на нескольких удаленных
способные СМИ. Для разделенного архива с 20 разделенными файлами файлы имеют тип
с именем (замените ARCHIVE на имя вашего архива) AR‐
CHIVE.z01, ARCHIVE.z02, ..., ARCHIVE.z19, ARCHIVE.zip. Обратите внимание, что
последний файл - это файл .zip.(...)
-s splitsize
--split-size splitsizeРазмер разделения - это число, за которым может следовать множитель.
В настоящее время число должно быть целым. Множитель может
в настоящее время может быть одним из k (килобайт), m (мегабайт), g (гигабайт),
или t (терабайты). Поскольку 64 КБ - это минимальный размер разделения, числа
без множителей по умолчанию мегабайты. Например, чтобы создать
съел разделенный архив с именем foo с содержимым панели
каталог с разделами 670 МБ, который может быть полезен для записи
на компакт-дисках команда:zip -s 670m -r foo bar
может быть использован.
Так, для создания разделенного zip-архива, вы можете сделать следующее ("-r
"рекурсивный" переключатель для включения подкаталогов каталога):
$ zip -r -s 10m archive.zip directory/
Чтобы распаковать файл, "zip
"manpage объясняет, что вы должны использовать переключатель" -s 0` ":
(...)
zip -s 0 split.zip --out unsplit.zip
преобразует разделенный архив в однофайловый архив.
(...)
Итак, вы первый "разделить" ZIP-файл используя переключатель "-s 0":
$ zip -s 0 archive.zip --out unsplit.zip
... а потом ты разархивируйте неразделенный файл:
$ unzip unsplit.zip
tar -czvf - /path/to/files | split -b 10M - archive.tar.gz
Вы получите несколько файлов:
archive.tar.gzaa
archive.tar.gzab
...
Что затем можно распаковать с помощью:
cat archive.tar.* | tar -xzvf -
Вот как я сделал это для файла размером 5 ГБ (разделенный на 1 ГБ против 10 МБ, как просил OP) ...
Пример: Чтобы разделить Файл 5 ГБ в Файлы размером 1 ГБ для копирования на USB-накопитель FAT32 (имя файла "FIVE_GB_FILE.ISO")
Шаг 1: заархивировать файл (без сжатия, тот же каталог, что и исходный)
zip -0 FIVE_GB_FILE.ZIP FIVE_GB_FILE.ISO
Шаг 2: разделить zip-файл размером 5 ГБ на файлы размером 1 ГБ
zip -s 1000m SPLIT_5GB_FILES FIVE_GB_FILE.ZIP
Вуаля ... у вас должны быть следующие файлы размером 1 ГБ (И оригинал, И zip с шага 1)
SPLIT_5GB_FILES.zip
SPLIT_5GB_FILES.Z01
SPLIT_5GB_FILES.Z02
SPLIT_5GB_FILES.Z03
SPLIT_5GB_FILES.Z04