Як зафіксувати файли з обмеженням розміру?


19

У мене є сценарій, який копіює файли з папки. Хочу переконатись, що заархівований файл не перевищує 10 Мб. Якщо розмір більше 10 Мб, він повинен створити ще один ZIP-файл.

Чи є якась команда (або інший метод), яку можна використовувати для цього?


1
Питання має тег gzip, але текст стосується zip , чи можете ви уточнити? (Відповіді розділені між підходами, що базуються на різних форматах.)
Хокан Ліндквіст,

Я не можу додати zip в тег ось чому я використав gzip. Якщо у вас є метод gzip, який я можу відповідати цій проблемі, я також можу використовувати його.
Вишну

Відповіді:


21

Ви можете використовувати функцію " розділений архів " " 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


6
tar -czvf - /path/to/files | split -b 10M - archive.tar.gz

Дасть вам декілька файлів:

archive.tar.gzaa

archive.tar.gzab

...

Що потім можна не стиснути за допомогою:

cat archive.tar.* | tar -xzvf -

2

Ось як я це зробив для файлу 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.