Mam ogromny plik tar (około 500G) i nie chcę z niego wyciągać ani jednego pliku.
Jednak po uruchomieniu tar -xvf file.tgz path/to/file
wydaje się, że wciąż ładuje całą zawartość do pamięci i rozpakowanie zajmuje ponad godzinę. Próbowałem również użyć --exclude=ignore.txt
gdzie ignore.txt jest listą wzorców, próbując powstrzymać ją przed przemierzaniem daremnych ścieżek, ale to nie działa.
Być może nie rozumiem tar ... Czy istnieje sposób na szybkie rozpakowanie pliku?
Odpowiedzi:
Niestety, aby rozpakować jednego członka
.tar.gz
archiwum, musisz przetworzyć całe archiwum i niewiele możesz zrobić, aby to naprawić.To tutaj
.zip
(i niektóre inne formaty, takie jak.rar
) archiwa działają znacznie lepiej, ponieważzip
format ma centralny katalog wszystkich plików w nim zawartych, z bezpośrednimi przesunięciami wskazującymi na środekzip
pliku, dzięki czemu członkowie archiwum można szybko wyodrębnić bez przetwarzania całej rzeczy.Możesz zapytać, dlaczego przetwarzanie
.tar.gz
jest tak wolne?.tar.gz
(często skracany jako.tgz
) to po prostu.tar
archiwum skompresowane za pomocągzip
kompresora.gzip
to kompresor strumieniowy, który może działać tylko z jednym plikiem. Jeśli chcesz uzyskać dowolną częśćgzip
strumienia, trzeba rozpakować go jako całość, a to co naprawdę zabija go.tar.gz
(i.tar.bz2
,.tar.xz
i innych podobnych formatów na podstawie.tar
)..tar
format jest w rzeczywistości bardzo, bardzo prosty. Jest to po prostu strumień 512-bajtowych nagłówków plików lub katalogów (nazwa, rozmiar itp.), Po których następuje zawartość pliku lub katalogu (w razie potrzeby uzupełniona do rozmiaru bloku 512 bajtami 0). Kiedy zaobserwujesz całkowicie zerowy blok 512 dla nagłówka, oznacza to koniec.tar
archiwizacji.Niektórzy uważają, że nawet
.tar
członkowie archiwum nie mogą uzyskać szybkiego dostępu, ale nie jest to do końca prawdą. Jeśli.tar
archiwum zawiera kilka dużych plików, faktycznie możesz szybko wyszukać następny nagłówek, a zatem możesz znaleźć niezbędnego członka archiwum w kilku poszukiwaniach (ale nadal może wymagać tyle wyszukiwań, ile jest członków archiwum). Jeśli twoje.tar
archiwum zawiera wiele małych plików, oznacza to, że szybkie pobieranie członków staje się praktycznie niemożliwe nawet dla nieskompresowanych.tar
.źródło
Jeśli wyodrębniasz tylko jeden plik z dużego pliku tar, używasz GNU
tar
, i możesz zagwarantować, że plik tar nigdy nie został dołączony, wtedy możesz uzyskać znaczny wzrost wydajności, używając--occurrence
.Ta opcja mówi tarowi, aby zatrzymał się, gdy tylko znajdzie pierwsze wystąpienie każdego żądanego pliku, np
nie będzie buforować całego archiwum po znalezieniu jednej kopii każdego z nich
passwd
ishadow
zamiast tego zatrzyma się. Jeśli te pliki pojawią się pod koniec, wzrost wydajności nie będzie duży, ale jeśli pojawią się nawet w połowie pliku 500G, zaoszczędzisz dużo czasu.Dla osób korzystających
tar
z kopii zapasowych pojedynczych ujęć i nieużywających prawdziwych napędów taśmowych taka sytuacja jest prawdopodobnie typowym przypadkiem.Pamiętaj, że możesz również przekazać,
--occurrence=NUMBER
aby pobrać LICZBĄ liczbę wystąpień każdego pliku, co pomaga, jeśli wiesz, że w archiwum znajduje się wiele wersji. Domyślnie zachowanie jest równeNUMBER
1.źródło
--occurrence
to natychmiast uruchomiło pierwszy plik? Zgaduję, że chodzi o nazwy plików, więc na przykład najpierw pojawi się coś o nazwie aaaaa.jpg?tar
dalsze wyszukiwanie w archiwum tar w poszukiwaniu nowszych wersji znalezionego pliku. Zamiast tego zwraca, ponieważ strona mężczyzna mówithe Nth occurrence
. Jeśli podasz jeden plik do wypakowania w wierszu poleceń i powiesz, że--occurrence
tar zakończy działanie, gdy tylko znajdzie ten plik, a tym samym skutecznie zatrzyma się na „pierwszym pliku”.W przypadku dużego użycia tarballa:
powyższe będzie wyszukiwać, aż znajdzie dopasowanie, a następnie zakończy działanie
źródło
man tar
(GNU tar 1.29) nawet nie drukuje tej opcji. Wydaje się jednak, że Ubuntu ma domyślnie włączone . Czytając szybko, nie jestem pewien, co--fast-read
robi inaczej--occurrence
. Ale--occurrence
to nie jest nawet na stronie Ubuntu, ale jest wman tar
. Czy--fast-read
i--occurrence
to samo może być?Niestety format pliku tar nie zawiera scentralizowanego spisu treści - archiwum należy więc odczytywać kolejno, aby zlokalizować konkretny plik. Pierwotnie był on przeznaczony dla kopii zapasowych na taśmach ( „smoła” pochodzi od t małpa ar szczypiorek), który nie byłby obsługiwany takiej operacji w każdym przypadku.
Więc prawdopodobnie będziesz musiał tylko poczekać.
źródło