Jak możemy wyodrębnić określone pliki z dużego pliku tar.gz? W tym pytaniu znalazłem proces wyodrębniania plików ze tar, ale kiedy wypróbowałem tam wspomniane polecenie, dostałem błąd:
$ tar --extract --file={test.tar.gz} {extract11}
tar: {test.tar.gz}: Cannot open: No such file or directory
tar: Error is not recoverable: exiting now
Jak wyodrębnić plik tar.gz
?
Odpowiedzi:
Możesz także użyć
tar -zxvf <tar filename> <file you want to extract>
Musisz napisać dokładną nazwę pliku, jak
tar ztf test.tar.gz
to pokazuje. Jeśli mówi np../extract11
Lubsome/bunch/of/dirs/extract11
, właśnie to musisz podać (a plik pojawi się pod dokładnie taką nazwą, potrzebne katalogi są tworzone automatycznie).-x
: nakazuje tarowi wypakowanie plików.-f
: określa nazwę pliku / nazwy pliku tarball.-v
: Pełne (pokaż postęp podczas rozpakowywania plików).-z
: filtruj archiwum przez gzip, użyj do dekompresji plików .gz.źródło
$ tar -zxvf test.tar.gz extract11
tar: extract11: Not found in archive
tar: Error exit delayed from previous errors
tar tf archive.tar.gz | grep extract11
proszę sprawdź, czy ekstrakt11 jest w archiwum czy nietar ztf test.tar.gz
to pokazuje. Jeśli mówi np../extract11
Lubsome/bunch/of/dirs/extract11
, właśnie to musisz podać (a plik pojawi się pod dokładnie taką nazwą, potrzebne katalogi są tworzone automatycznie).-z
opcja nie działa w niektórych wersjach Uniksa, takich jak HP-UX.f
nie może być na końcu. Ale bezpośrednio po nim musi być nazwa pliku. Ten przykład z wszystkich innych opcji po nazwie smoły działa dobrze:tar -f mytar.tar.gz -zxv dir/somefile
. Wyodrębnia „dir / somefile” z „mytar.tar.gz”.Załóżmy, że masz wywoływany plik tarball
lotsofdata.tar.gz
i wiesz, że jest tam jeden plik, który chcesz, ale wszystko, co pamiętasz, to jego nazwacontract
. Masz dwie opcje:Użyć
tar
igrep
notować zawartość swojego archiwum, dzięki czemu można dowiedzieć się pełną ścieżkę i nazwę wszystkich plików pasujących część znasz, a następnie użyćtar
, aby wyodrębnić, że jeden plik teraz wiesz swoje dokładne dane, czy można korzystać z dwóch mało znane przełączniki, aby wyodrębnić wszystkie pliki, które pasują do tego, co niewiele wiesz o nazwie pliku - nie musisz znać pełnej nazwy ani żadnej części jej ścieżki dla tej opcji. Szczegóły są następujące:opcja 1
Spowoduje to wyświetlenie szczegółów wszystkich plików, których nazwy zawierają znaną część. Następnie wyodrębnij to, czego chcesz, używając:
Może być konieczne,
./
aby Twoja ścieżka działała.Opcja 2
Do Ciebie, które uważasz za łatwiejsze lub najbardziej przydatne.
źródło
tar -xzf lotsofdata.tar.gz <full path and filename from your list above>
pracował dla mnie./
z naszym dawaniem na początku pełnej ścieżki--wildcards
opcji. Nadal byłem w stanie uzyskać podobne zachowanie-x -O *foo
.*foo
w moim przypadku był glob globu nazw plików, ponieważ wiedziałem, że plik zakończył się na foo.Próbowałem wyodrębnić kilkaset plików z tarballa z tysiącami plików innego dnia. Pliki, których potrzebuję, nie mogą być przywoływane przez pojedynczą symbol wieloznaczny. Więc przejrzałem i znalazłem tę stronę.
Żadna z powyższych sztuczek nie wydaje się jednak odpowiednia do mojego zadania. Skończyło się na czytaniu mężczyzny i znalazłem tę opcję
--files-from
, więc moim ostatecznym rozwiązaniem jesti działa jak urok.
Aktualizacja: plik listy powinien mieć taki sam format, jak można zobaczyć
tar -tvf
, w przeciwnym razie nie będzie można wyodrębnić żadnych plików.źródło
Twój przykład działa dla mnie, jeśli pominiesz nawiasy klamrowe
Jeśli plik ekstrakt11 znajduje się w podfolderze, powinieneś określić ścieżkę w pliku archiwum.
źródło
$ tar --extract --file=test.tar.gz extract11
tar: extract11: Not found in archive
tar: Error exit delayed from previous errors
Poniżej znajdują się przykłady wyodrębniania określonych plików z pliku tar.gz.
Z pliku lokalnego:
Ze zdalnego adresu URL:
źródło