LinuxForum.Fans
Тема

Вопрос по созданию zip-архива

Автор: valet 33 сообщений 6611 просмотров
#202124

Нужно создать zip-архив включив в него все файлы, каталоги и подкаталоги, исключая указанные каталоги.
Как создать архив со всей структурой разобрался:

text
zip -r vse.zip *

А вот как запретить при этом архивацию каталога например по имени images, то есть чтобы в архиве vse.zip было все, кроме images?

#202251

man zip точно знает.
Читать в районе ключика -x.

#202353

Спасибо работает.
Сразу уточню как исключить несколько каталогов - может кому-то пригодится.
[console]zip -r all.zip * -x\dir1/* -x\dir2/*[/console]
В архив all.zip будут внесены все файлы и каталоги (включая подкаталоги) текущей директории с исключением каталогов dir1 и dir2.

#204112

Еще такой вопрос: а как отключить сжатие вообще, то есть задача собрать просто все файлы в 1 архив.
Если кому-то непонятно, зачем это нужно я объясню.

Например стоит задача перенести большое количество файлов и каталогов с одного компьютера в интернете на другой максимально быстро. Можно начать перелив пофайлово, но придется очень долго лить, гораздо быстрее упаковать, перенести 1 файл (линейная скорость передачи будет очень высокой) и распаковать на месте. При этом zip-архив меня в первую очередь интересует как инструмент упаковки в 1 файл, а сжатие меня не интересует, упаковка/распаковка шла бы гораздо быстрее, если не сжимать.

Я что-то никак не могу разобраться какой ключ задать, чтобы zip не сжимал данные.

#204124

Связка из tar+gzip представляется более целесообразной.

Касательно вопроса: man zip на предмет ключа -Z, --compression-method.

#210516
valet написал:
задача перенести большое количество файлов и каталогов с одного компьютера в интернете на другой максимально быстро.

всё уже придумано до нас:

File: tar.info, Node: Applications, Next: looking ahead, Prev: backup, Up: operations

4.6 Notable `tar' Usages
========================

_(This message will disappear, once this node revised.)_

You can easily use archive files to transport a group of files from one
system to another: put all relevant files into an archive on one
computer system, transfer the archive to another system, and extract
the contents there. The basic transfer medium might be magnetic tape,
Internet FTP, or even electronic mail (though you must encode the
archive with `uuencode' in order to transport it properly by mail).
Both machines do not have to use the same operating system, as long as
they both support the `tar' program.

For example, here is how you might copy a directory's contents from
one disk to another, while preserving the dates, modes, owners and
link-structure of all the files therein. In this case, the transfer
medium is a "pipe":

$ (cd sourcedir; tar -cf - .) | (cd targetdir; tar -xf -)

You can avoid subshells by using `-C' option:

$ tar -C sourcedir -cf - . | tar -C targetdir -xf -

The command also works using long option forms:

$ (cd sourcedir; tar --create --file=- . ) \
| (cd targetdir; tar --extract --file=-)

or

$ tar --directory sourcedir --create --file=- . \
| tar --directory targetdir --extract --file=-

This is one of the easiest methods to transfer a `tar' archive.




#210833

Если "максимально быстро через Интернет", то можно ещё сжимать с помощью xz.

Пётр.

#210846
Peter написал:
Если "максимально быстро через Интернет", то можно ещё сжимать с помощью xz.

можно.... tar -cJ
Вот только на практике у меня получилось медленнее, да ещё и народ возмутился - памяти мало :(
Пришлось вернуть bzip2.

#210861
drBatty написал:
[quote=Peter]Если "максимально быстро через Интернет", то можно ещё сжимать с помощью xz.

можно.... tar -cJ
Вот только на практике у меня получилось медленнее, да ещё и народ возмутился - памяти мало :(
Пришлось вернуть bzip2.[/quote]
Я имел в виду только время пересылки. Памяти xz вроде бы действительно требует больше,
а скорость работы зависит от опций. На глаз работает быстро, но я не сравнивал xz и bzip2
по скорости работы.

Пётр.

#210869
Peter написал:
Памяти xz вроде бы действительно требует больше,
а скорость работы зависит от опций. На глаз работает быстро, но я не сравнивал xz и bzip2
по скорости работы.

я сравнивал. Памяти xz не только много забирает, он её ещё и использует, причём совершенно случайным образом (о кешах можно забыть). А bzip2 - очень древняя программа, и потребляет мало памяти, даже с -9. Ну и скорость соответственно у bzip2 обычно намного быстрее. А сжатие немного хуже. Но это совсем не однозначно. На практике возможно и по другому.

В любом случае - бывает, что время сжатия сильно превышает время загрузки. (особенно если учесть толщину сегодняшних каналов, и тот факт, что bzip2 уже подходит почти вплотную к пределу сжатия).

#210882

Сейчас проверил на каталоге с подкаталогами и оказалось в точности так, как Вы говорите.
Размер tar - 281690K, bzip2 работал 1m29s, размер архива - 130177K,
xz за 2m52s создал архив размером 128328K.
Однако на небольшом архиве с проектом на Qt xz сжал каталог вдвое лучше, чем zip.

Пётр.

#210883
Peter написал:
Однако на небольшом архиве с проектом на Qt xz сжал каталог вдвое лучше, чем zip.

именно zip?

bzip2 это совершенно особый, уникальный архиватор.

#210886
drBatty написал:
[quote=Peter]Однако на небольшом архиве с проектом на Qt xz сжал каталог вдвое лучше, чем zip.

именно zip?

bzip2 это совершенно особый, уникальный архиватор.[/quote]
Да, именно zip. Размер tar - 102400, zip - 28248, bzip2 - 13248, xz - 12344,
т.е. и здесь разница невелика.

Пётр.

#210889
Peter написал:
Размер tar - 102400, zip - 28248, bzip2 - 13248, xz - 12344,

ну zip это LZ78, как и gzip. 1978й год был очень давно...

#210939
drBatty написал:
ну zip это LZ78, как и gzip.

не совсем, zip - lz78
gzip - deflate (lz с плюшками )
правда по эффективности практически не отличаются

#210966
Fat-Zer написал:
не совсем, zip - lz78
gzip - deflate (lz с плюшками )

ох... Это всё интересно только олдфагам :)

Fat-Zer написал:
правда по эффективности практически не отличаются

они и в принципе ничем не отличаются :P

#211072

Много мелких файлов лучше всего переносить rsync`ом wink

#223847

bzip2 сжимает большинство файлов эффективнее, но медленнее, чем более традиционные gzip или ZIP. В этом отношении он похож на другие современные алгоритмы сжатия.

http://ru.wikipedia.org/wiki/Bzip2#.D0.AD.D1.84.D1.84.D0.B5.D0.BA.D1.82.D0.B8.D0.B2.D0.BD.D0.BE.D1.81.D1.82.D1.8C

Вот сейчас стоит задача максимально быстро упаковать на одной системе и распаковать на другой 150 тысяч файлов. Сжатие не интересует вообще. Нужно использовать минимум процессора и памяти, чтобы не подвисать систему. Не могу определится что использовать zip (с опцией -0) или tar. Визуально скорость tar что-то не понравилась - долго почему-то пакует и распаковывает, кажется zip гораздо быстрее - да и какой-никакой прогресс показывает пусть в виде хотя бы распакованных файлов.

Подскажите что выбрать.

#223852
valet написал:
bzip2 сжимает большинство файлов эффективнее, но медленнее

нет. алгоритм конечно занимает какое-то время, но и чтение/запись - тоже. Пока мы не запишем, нам нельзя считать, потому если скорость записи низкая (а она низкая), то каким-бы не была скорость сжатия, тормозить процесс будет не она. Потому на практике скорость сжатия часто не влияет на общую скорость. Мы не можем писать быстрее, однако можем писать меньше, сжав архив. По этой причине часто сжатие даёт увеличение скорости, а вику пишут недоучки.
Хотя конечно всё зависит от CPU и количества памяти. Если вы используете xz -9 на третьем пне, то конечно жать он у вас будет неделями. Но bzip2 довольно древний архиватор, и на компах моложе 7 лет обычно даёт ускорение.

valet написал:
кажется zip гораздо быстрее

случайные флуктуации. С чего он будет быстрее, да ещё и "гораздо"? Наверное просто архив оказался рядом с данными или типа того.

#223859

drBatty, мне сжимать вообще не надо, а bzip2 как я понял только сжимает. Поэтому вопрос выбора между tar и zip. Вот не знаю что выбрать - 150 тысяч файлов - операция нелегкая. Может это вообще стоит на группы как-то файлы разбить - только как чтобы автоматом.
Задача перелить 150 тысяч файлов с одного сервера на другой. Если лить скажем filezill'ой пофайлово - то это будет очень долго. Если делать tar --gzip - вешает систему.

drBatty, так все таки что бы вы порекомендовали для даной задачи: упаковать 150 тысяч файлов (упаковка может быть медленной и ресурсоемкой - это будет делаться на компьютере, на котором нагрузка меня не волнует) и распаковать - здесь уже мне нужна минимальная нагрузка на систему - особенно процессор. Чем воспользоваться, никак не могу определится.

Войдите или зарегистрируйтесь, чтобы ответить.