Moduł File::NCopy
Uniwersytet Gdański - Instytut Matematyki - Zakład Informatyki - Strona domowaSpis treści
Obsługa modułu File::NCopy
Opis
File::NCopy to moduł autorstwa Gabor'a Egressy'a - moduł potępiony :). Można używać zamiennie z Use File::Copy::Recursive. File::NCopy::copy kopiuje pliki bądź całe katalogi do katalogu, może kopiować wraz ze zmianą nazwy. Można również używać referencji do uchwytu pliku. Funkcjonalność jest bardzo podobna do Unix'owego polecenia cp. Jeśli argument jest ścieżką do katalogu oraz flaga rekursywnego kopiowania jest ustawiona, wówczas mamy działanie podobne do cp -R. W większości przypadków działa to podobnie do funkcji cp, jak już wcześniej wspomnieliśmy. Jeśli została wywołana w kontekście tablicowym, zwrócona zostaje tablica skopiowanych elementów (jeśli kopiowanie przebiegło pomyślnie), w przeciwnym wypadku, zwrócona zostaje liczba udanych kopii. Jeśli podano uchwyt do pliku, trudno być pewnym, czy plik który kopiujemy nie jest taki sam, do którego kopiujemy, ponieważ plik jest otwarty do zapisu i staje się to niemożliwe. Aby uniknąć tego problemu, należy używać nazw plików, jeśli tylko to możliwe, szczególnie w odniesieniu do plików. Jeśli podano uchwyt do pliku, nie jest on zamknięty, gdy zwrócona jest kopia, zostaje on zamknięty zaraz po zwróceniu wartości.
Download
- Pakiet możemy pobrać z CPANu
Instalacja w systemie UNIX'owym
Po rozpakowaniu modułu wydajemy polecenia
perl Makefile.PL
make
make install
Jeżeli wszystko poszło zgodnie z planem, to możemy już korzystać z możliwości naszego nowego modułu. Sprawdzić, czy został pomyślnie zainstalowany możemy, pisząc chociażby takiego jednolinijkowca:
perl -e 'use File::NCopy'
Pomyślne wykonanie programu (żadnych komunikatów) daje nadzieję, że moduł jest zainstalowany i będzie działał.
Dostępne metody
- copy file[s] | dir[s], dir - kopiuje plik do innego pliku lub plik do katalogu, bądź też pliki oraz katalogi do innego katalogu lub katalog do innego katalogu. Prawa dostępu plików jak również katalogów są ustawione zgodnie z prawami oryginalnych plików podobnie jest z czasem modyfikacji. W kontekście listowym zwraca nazwy wszystkich plików/katalogów, które zostały skopiowane z powodzeniem. W skalarnym kontekście zwraca liczbę wykonanych z powodzeniem kopii. Aby skopiować katalog do katalogu, flaga rekursywności musi być ustawiona.
- cp - wywołuje copy
- new - zwraca obiekt, który możesz traktować jako zorientowany moduł z pewnymi konfiguracyjnymi możliwościami
- recursive - możesz tego użyć w celu ustawienia atrybutu rekursywności. Rekursywność może również zostać ustawiona natychmiastowo z new.
- preserve - próba zabezpieczenia czasu ostatniej modyfikacji oraz dostępu użytkownika oraz grupy. Jest to użyteczna właściwość dla administratorów.
- follow_links - jeżeli link jest do katalogu oraz ten atrybut jest ustawiony na true, to cały katalog jest prześledzony i rekursywnie kopiowany. W przeciwnym wypadku
- force_write - wymuszenie opcji do zapisu nawet, gdy prawa dostępu są ustawione na tylko do odczytu.
Przykłady zastosowań modułu File::NCopy
Krótkie przykłady przedstawiono poniżej:
use File::NCopy qw(copy);
copy "file","other_file";
copy "file1","file2","file3","directory";
kopiowanie rekursywne:
copy \1,"directory1","directory2";
copy \1,"file1","file2","directory1","file3","directory2","file4","directory";
kopiowanie przy użyciu uchwytów do plików:
copy \*FILE1,\*FILE2;
copy \*FILE1,"file";
copy "file1",\*FILE2;
nie określiliśmy parametru \1, bo nie chcemy kopiować rekursywnie:
copy "*.c","*.pl","programs";
copy "*", "backup";
nieco bardziej złożony przykład:
$file = File::NCopy->new(
'recursive' => 0,
'preserve' => 0,
'follow_links' => 0,
'force_write' => 0,
'set_permission' => \&File::NCopy::u_chmod,
'file_check' => \&File::NCopy::f_check,
'set_times' => \&File::NCopy::s_times,
);
$file = File::NCopy->new(recursive => 1);
$file->copy "file","other_file";
$file->copy "directory1","directory2";
$file = File::NCopy->new(u_chmod => \&my_chmod,f_check => \&my_fcheck);
$file->copy "directory1","directory2";
Dodatkowe informacje
Macierzysta strona dokumentacji do modułu http://search.cpan.org/~chorny/File-NCopy-0.35/lib/File/NCopy.pm
Autor opracowania
Szymon Roziewski
Email: sroziews@manta.univ.gda.pl