У мене є сценарій, який копіює файли з папки. Хочу переконатись, що заархівований файл не перевищує 10 Мб. Якщо розмір більше 10 Мб, він повинен створити ще один ZIP-файл.
Чи є якась команда (або інший метод), яку можна використовувати для цього?
У мене є сценарій, який копіює файли з папки. Хочу переконатись, що заархівований файл не перевищує 10 Мб. Якщо розмір більше 10 Мб, він повинен створити ще один ZIP-файл.
Чи є якась команда (або інший метод), яку можна використовувати для цього?
Відповіді:
Ви можете використовувати функцію " розділений архів " " zip ", використовуючи опцію " --split-size ".
З сторінки "zip" (" man zip
"):
(...)
Одне використання розділених архівів - це зберігання великого архіву на декількох знімних
носіях. Для розділеного архіву з 20 розділеними файлами файли типово
називаються (замініть
ARCHIVE на ім'я вашого архіву) AR‐ CHIVE.z01, ARCHIVE.z02, ..., ARCHIVE.z19, ARCHIVE.zip. Зауважте, що
останнім файлом є .zip файл.(...)
-s splitsize -
split-розмір splitsizeРоздільний розмір - це число, необов'язково яке супроводжується множником.
Наразі число повинно бути цілим числом. На
даний момент множник може бути одним із k (кілобайт), m (мегабайт), g (гігабайт)
або t (терабайт). Оскільки 64k - мінімальний розмір розбиття,
для мегабайт за замовчуванням задаються числа без множників. Наприклад, щоб створити
розділений архів під назвою foo із вмістом штрихової
директорії з розщепленнями 670 Мб, які можуть бути корисні для запису
на компакт-диски, команда:zip -s 670m -r foo bar
може бути використаний.
Отже, для створення розділеного архіву zip ви можете зробити наступне (" -r
" - це "рекурсивний" перемикач для включення підкаталогів каталогу):
$ zip -r -s 10m archive.zip directory/
Щоб розпакувати файл , " zip
" сторінка " " пояснює, що ви повинні використовувати перемикач "-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 МБ, як просив ОП) ...
Приклад: розділити файл 5 Гб на 1 ГБ файлів, щоб скопіювати на USB-диск FAT32 (назва файлу "FIVE_GB_FILE.ISO")
Крок 1: зашпаклюйте файл (без стиснення, той самий каталог, що і джерело)
zip -0 FIVE_GB_FILE.ZIP FIVE_GB_FILE.ISO
Крок 2 : розділіть поштовий файл 5 Гб на 1 ГБ поштових файлів
zip -s 1000m SPLIT_5GB_FILES FIVE_GB_FILE.ZIP
Voila ... у вас повинні бути такі файли 1 Гб (І оригінал, І ZIP на кроці 1)
SPLIT_5GB_FILES.zip
SPLIT_5GB_FILES.Z01
SPLIT_5GB_FILES.Z02
SPLIT_5GB_FILES.Z03
SPLIT_5GB_FILES.Z04