Tar.pm: не Zipом единым!
Это не перевод документации к модулю 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
формате)
|