Moduł Archive::Tar
Uniwersytet Gdański - Instytut Matematyki - Zakład Informatyki - Strona domowaSpis treści
Obsługa modułu Archive::Tar
Co to jest
W ramach przypomnienia Tar - nazwa pochodzi od angielskiego Tape Archiver - Archiwizator Taśm, to uniksowy program do umieszczania grupy plików w jednym zbiorczym pliku (tzw. archiwum), który następnie może zostać skompresowany. Archive::Tar to moduł autorstwa Jos Boumans'a. Dzięki mechanizmowi zorientowanemu obiektowo jesteśmy w stanie manipulować archiwami tar'a. Moduł ten wprowadza metody klasy dla szybkiej i łatwej obsługi plików jak również pozwala na tworzenie obiektów oraz manipulowanie nimi. Jeżeli mamy zainstalowany moduł IO::Zlib, to Archive::Tar będzie również obsługiwał pliki tar skompresowane gzipem.
Download
- Pakiet możemy pobrać z CPANu
Instalacja w systemie UNIX'owym
Po rozpakowaniu modułu wydajemy polecenie
perl Makefile.PL
make
make install
Sprawdzamy, czy został on pomyślnie zainstalowany, pisząc jednolinijkowca
perl -e 'use Archive::Tar'
Pomyślne wykonanie programu (żadnych komunikatów) daje nadzieję, że moduł został zainstalowany poprawnie i będzie działał. Jeżeli wszystko poszło zgodnie z planem to możemy już korzystać z możliwości naszego nowego modułu.
Konstruktor
my $tar = Archive::Tar->new();
Dostępne metody klasy
- Archive::Tar->create_archive($file, $compression, @filelist)
- Tworzy plik tar z wprowadzonej listy. Pierwszy argument może być nazwą pliku tar, który chcemy utworzyć lub też referencją do otwartego deskryptora pliku. Drugi argument określa poziom kompresji. Inna niż domyślna wartość kompresji wymaga instalacji modułu IO::Zlib. Aby okreslić poziom kompresji wymagane jest podanie wartości pomiędzy 2 a 9, każda inna wartość ewaluowana jako true, zwróci jako rezultat domyślny poziom kompresji. Trzeci argument jest listą plików jakie chcemy dodać do naszego archiwum (wszystkie pliki nie do odczytu oraz te które nie istnieją zostaną pominięte). Jeżeli z jakiegoś powodu tworzenie archiwum się nie powiedzie, to create_archive() zwróci false. Metoda ta nie zapisuje plików w "locie", wczytuje je do pamięci przed zapisaniem do archiwum.
- Archive::Tar->list_archive ($file, $compressed, [\@properties])
- Zwraca listę nazw wszystkich plików zawartych w archiwum. Jeżeli list_archive() przekazuje referencję do tablicy jako trzeci argument, to zwróci listę referencji do haszy, zawierających wymagane właściwości każdego pliku. Lista ta zawiera: pełną ścieżkę, nazwę, rozmiar, datę ostatniej modyfikacji, uid, gid, nazwę wiązania itp.
- Archive::Tar->extract_archive ($file, $gzip)
- Wypakowuje zawartość pliku tar. Pierwszy argument jest nazwą archiwum, które zostanie utworzone lub referencją do otwartego deskryptora pliku. Wszystkie ścieżki w pliku tar zostaną utworzone w obecnym katalogu roboczym. Extract_archive() zwróci listę rozpakowanych plików. Jeżeli ekstrakcja nie powiedzie się z jakiegoś powodu, to funkcja zwróci false.
- Archive::Tar->can_handle_compressed_files
- Zwykłe rutynowe sprawdzenie, zwracające true jeżeli Archive::Tar jest w stanie zdekompresować w "locie" skompresowane archiwum za pomocą IO::Zlib lub false jeżeli IO::Zlib nie jest zainstalowane.
Dostępne metody obiektu
- $tar->read ( $filename|$handle, $compressed, {opt => 'val'} )
- Wczytuje podany jako pierwszy argument plik do pamięci, może nim być nazwa pliku lub też referencja do otwartego deskryptora pliku (lub do obiektu IO::Zlib jeżeli jest skompresowany). Drugi argument wskazuje, czy plik jest skompresowany. Read() zastąpi poprzednią zawartość w $tar. Drugi argument może być rozważany jeżeli IO::Zlib jest zainstalowane.
Trzeci argument może być referencją do hasza zawierającego opcje:
- limit Nie czytaj więcej plików niż wynosi limit. Jest to użyteczne, gdy mamy bardzo duże archiwum, a jesteśmy zainteresowani tylko kilkoma pierwszymi plikami.
- extract Jeżeli ustawione na true, natychmiast wypakuj pliki podczas ich wczytywania.
- $tar->contains_file( $filename )
- Sprawdza, czy archiwum zawiera dany plik. Zwróci true jeżeli plik znajduje się w archiwum, w przeciwnym wypadku zwróci false.
- $tar->extract( [@filenames] )
- Zapisuje na dysk pliki, których nazwy są równowazne z nazwami w tablicy @filenames, tworząc podkatalogi jeżeli jest to wymagane. Może nie działać dobrze pod VMS. Jeżeli extract() jest wywołana bez listy plików, to cała zawartość archiwum zostaje wypakowana. Wartością zwracaną jest lista nazw plików, które zostały wypakowane.
- $tar->list_files( [\@properties] )
- Zwraca listę nazw wszystkich plików w archiwum.
- $tar->get_files( [@filenames] )
- Zwraca obiekt Archive::Tar::File odpowiadający nazwą poszczególnym plikom. Jeżeli lista plików nie była podana, zwracane są wszystkie obiekty z obecnego obiektu Tar.
- $tar->get_content( $file )
- Zwraca zawartość pliku.
- $tar->replace_content( $file, $content )
- Pozwala na zapisanie stringa $content jako zawartości pliku $file
- $tar->rename( $file, $new_name )
- Zmienia nazwę pliku znajdującego się w archiwum, które jest przechowywane w pamięci. Zwraca true jeżeli wszystko się powiodło, w przeciwnym przypadku false.
- $tar->remove (@filenamelist)
- Usuwa z pamięci archwum wszelkie wpisy pasujące do podanych nazw. Zwraca listę obiektów Archive::Tar::File, które pozostały.
- $tar->clear
- Czyści archiwum znajdujące się w pamięci. Otrzymujemy czysty obiekt, gotowy do ponownego zapełnienia.
- $tar->write ( [$file, $compressed, $prefix] )
- Zapisuje archiwum przechowywane w pamięci na dysk. Pierwszy argument może być nazwą pliku lub referencją do dotychczas otwartego deskryptora pliku. Jeżeli drugi argument jest true, to moduł użyje IO::Zlib do zapisu pliku w skompresowanym formacie. Jeżeli IO::Zlib nie jest dostępne, to metoda write() nie powiedzie się. Trzeci argument jest opcjonalnym prefiksem. Wszystkie pliki zostaną umieszczone w katalogu, który użyjemy jako prefiks. Jeżeli użyjemy write() bez argumentów, zostanie zwrócony string zawierający sformatowane archiwum.
- $tar->add_files( @filenamelist )
- Pobiera listę nazw plików i dodaje je do archwum przechowywanego w pamięci. Zwraca listę obiektów Archive::Tar::File, które zostały dodane w tej operacji.
- $tar->add_data ( $filename, $data, [$opthashref] )
- Pobiera nazwę pliku, skalar z danymi oraz opcjonalnie referencję do hasza. Dodaje plik do archiwum z nazwą oraz określoną zawartością. Zwraca obiekt Archive::Tar::File, który właśnie został dodany lub undef w razie niepowodzenia.
- $tar->error( [$BOOL] )
- Zwraca "errorstring" zazwyczaj z ostatnim zgłoszonym błędem.
- $tar->setcwd( $cwd )
- Archive::Tar musi znać obecny katalog i uruchamia Cwd::cwd() za każdym razem jeżeli rozpakowuje archiwum i zapisuje je w systemie plików.
- $bool = $tar->has_io_string
- Zwraca true jeżeli mamy załadowane wsparcie dla IO::String
- $bool = $tar->has_perlio
- Zwraca true jeżeli mamy załadowane wsparcie dla perlio.
Przykład
Zadanie polega na rozpakowaniu archiwum rabin.tar.gz, następnie utworzeniu nowego archiwum, zawierającego pliki slownik.txt, test.php. Chcemy również, aby znajdował się tam plik z określoną przez nas treścią. Zmieniamy również nazwę pliku slownik.txt na nowy_slownik.txt.
use strict;
use Archive::Tar;
my $tar = Archive::Tar->new(); #Konstruktor
$tar->read('rabin.tar.gz',1); #Wczytujemy plik
$tar->extract(); #Rozpakowujemy
$tar->add_files('slownik.txt', 'test.php'); #Umieszczamy w pamięci dwa pliki
$tar->add_data('baz.txt', 'Wpisujemy zawartosc do pliku'); #Zapisujemy treść do pliku
$tar->rename('slownik.txt', 'nowy_slownik.txt'); #Zmieniamy nazwe pliku
$tar->write('nasz_plik.tar'); #Zapisujemy na dysku
Zawartość naszego archiwum
Zawartość pliku baz.txt
Dodatkowe informacje
Moduł nasz może być wykorzystywany przy wszelkich manipulacjach dotyczących archiwizacji.
- Macierzysta strona dokumentacji do modułu http://search.cpan.org/~kane/Archive-Tar-1.32/lib/Archive/Tar.pm
- Specyfikacja tara http://www.gnu.org/software/tar/manual/tar.html
- Porównanie standardów tar GNU i POSIX http://www.delorie.com/gnu/docs/tar/tar_114.html
Autor opracowania
Adrian Sielski
Email: adrian.sielski@gmail.com