NFsec Logo

Przenoszenie dużej ilości plików

16/06/2009 w Administracja Brak komentarzy.  (artykuł nr 73, ilość słów: 248)

O

d czasu do czasu zdarzy się potrzeba przeniesienia kilku plików w systemie. Oczywiście nie ma z tym większego problemu, wystarczy użyć polecenia: “mv katalog1/* katalog2/”. Problem pojawia się w momencie, gdy specjalny znak gwiazdki (ang. asterisk) przy bardzo dużej liczbie plików powoduje, że każdy plik w katalogu źródłowym zostaje dodany jako parametr linii poleceń komendy mv. Spowodować może to przepełnienie buforu linii poleceń i zakończenie programu z błędem: "Too many arguments" (Zbyt wiele argumentów).

Z tego rodzaju problemem można się spotkać korzystając z polecenia mv, przenosząc zawartość katalogu, która liczy powyżej miliona plików. Oczywiście nie każdego dnia zdarza się przenosić taką ilość plików, lecz napotykając na tego rodzaju problem – lepiej mieć już gotowe rozwiązanie – polegające na użyciu poręcznego programu xargs, który został zaprojektowany by pobierać dużą listę argumentów ze standardowego wejścia i przekazać je jako odseparowane argumenty do innego polecenia:

find katalog1 -type f -print | xargs -l1 -i mv {} katalog2/

Parametr -l1 mówi xargs by przekazywał po jednym argumencie na raz do programu mv. Natomiast parametr -i mówi xargs, że przekazywany argument powinien zostać wstawiony w miejsce “klamer” {}. W ten sposób cała składnia spowoduje wykonanie polecenia mv dla każdego pliku w katalogu źródłowym. Optymalizacją dla tego rozwiązania byłoby przekazanie np. 50 argumentów (nazw plików) na raz do polecenia move poprzez parametr -l50, jednak w systemie Linux xargs przy użyciu równocześnie parametru -i (--replace) wymusza przekazanie tylko jednego argumentu na raz.

Więcej informacji: xargs, HacksZine

Kategorie K a t e g o r i e : Administracja

Tagi T a g i : , ,

Komentowanie tego wpisu jest zablokowane.