WebScript.Ru
C:\   главная  ::   о сайте  ::  каталог скриптов  ::  гнездо  ::  форум  ::   авторам  :: Новостройки ::   ХОСТИНГ  ::

|| разделы::
|| поиск по сайту::

|| реклама::
|| новости почтой::
Рассылки Subscribe.Ru ::



Новости сайта WebScript.Ru
Популярные статьи

Hot 5 Stories

|| рекомендуем::




Tar.pm: не Zipом единым!


Прислал: Green Kakadu [ 12.10.2001 @ 02:35 ]
Раздел:: [ Статьи по Perl ]


Это не перевод документации к модулю Tar.pm (которая в общем-то мала, краткое описание 11 доступных методов - вот и вся документация), а скорее "краткая записка для лентяев и всех интересующихся", т.к. если бы сей вопрос вас жутко интересовал, то вы наверняка заглянули бы в CPAN архив и подобрали парочку соответствующих модулей. Ну и пишу я это от нечего делать - жду пока ;) сосиски сварятся. Потому приступим сразу к делу!

Tar.pm - модуль для работы с tar архивами. Работает под Linux, Solaris, Windows. Насчет соляриса не знаю, а под Win и Linux он действительно работает :) и работают те два примера, что я приведу ниже. Говорят, что модуль глючит под MacOS, но автору модуля похоже на Mac глубоко наплевать, т.к. он написал, что мол нету у него Mac'a и ему проверять эту информацию вломак.
Модуль весьма небольшой, не требует предварительной инсталляции и его можно подключать используя require.

Теперь зархивируем чего-нибудь! Для этого напишем такой скриптик:

Архивация:

#!/usr/bin/perl
use Archive::Tar;
my $tar = Archive::Tar->new();
$tar->add_files("file1", "file2", "file3");#Список файлов
$tar->write('files.tar');

В общем то и все. В результате выполнения сценария вы получите файлик files.tar, в котором будут находиться файлы: file1, file2, file3

Метод add_files(@file_names) - должен получить получить список файлов, и их он помещает в архив, который хранится в памяти. Ну а метод write('file.tar') записывает архив, содержащийся в памяти, непосредственно в файл file.tar, т.е. наш архивчик теперь хранится не только в памяти, но и на диске, чего, собственно, мы и хотели. Думаю, стоит про метод write(), сказать подробнее.
Его синтаксис: write('file.tar',$compressed) - первый параметр, это имя файла, в который мы и запишем наш архив. Возможно некоторых это и удивит, но этот параметр необязателен, можно его и опустить, в тако случае, наш архив возвращается как строковая переменная, которую можно будет применить по своему усмотрению. Второй параметр $compressed - тоже необязательный. Если он будет 'true', то будет осуществлено сжатие архива. Тут стоит быть осторожным, т.к. для включения этой опции необходимо чтоб у вас был инсталлирован модуль Zlib.pm (пакет Compress::Zlib ), если его не будет, а у вас будет включена компрессия, то Tar.pm будет ругаться.

Теперь займемся разархивацией:

Разархивация:
#!/usr/bin/perl
use Archive::Tar;
my ($tar, @files);
$tar = Archive::Tar->new();
$tar->read('files.tar');
@files=$tar->list_files();
$tar->extract(@files);
В результате выполнения сценария мы получим то, что и хотели получить: помимо files.tar у нас будут иметься и file1, file2 и т.д., т.е. содержимое архива.

read('files.tar',$compressed) - первый параметр имя файла, второй опция копрессии (необязательный параметр), о компрессии (сжатии) я говорил выше. В результате выполнения этого метода наш архив files.tar считывается в память.

list_files() - этот метод возвращает нам список имен файлов, содержащихся в архиве, который, в свою очередь, содержится в памяти.

extract(@files) - сей метод получает список имен файлов и занимается их разархивацией. Если необходимо, то он создает субдиректории (например, если имя файла было 'myfiles/file1', то будет создана директория myfiles). Заметьте, что из архива необязательно извлекать все содержащиеся в нем файлы - можно и какой-нибудь определенный, например только file1.

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

CPAN: Archiving Compression Conversion - А тут вы найдете все необходимое: модуль Tar.pm (Archive::Tar) о котором я разглагольствовал, а также множество других модулей, которые предназначены для работы с архивами (в том числе и для архива в ZIP формате)


 :::::  Евгений пишет 12.11.2001 @ 23:12 
А как заархивировать весь сайт, а потом разархивировать в новом месте?
А то с f2s переезжать собрался, а в сайте (http://duhi.f2s.com) тысяч 6 файлов, да еще и со сложной структурой каталогов.
Может как-то можно указать корневой каталог и чтобы архивировало вместе с подкаталогами? (да и gz как то подключить надо, а то файлы tar очень здоровые)
Имя:
Email:
URL

Введите сумму двух чисел девять и одинн (девять+одинн=?)
Запомнить мою информацию

* Html запрещен* Ваш E-mail опубликован не будет.

Copyright © 2000-2001 WebScript.Ru nas@webscript.ru
Design © 2001 by Parallax Design Studio (aka Spectator.ru)
Все торговые марки и авторские права на эту страницу принадлежат их соответствующим владельцам.
Сгенерировано за: 0.0125339