Jakiego polecenia potrzebuję do rozpakowania / rozpakowania pliku .tar.gz?

830

Otrzymałem ogromny plik .tar.gz od klienta, który zawiera około 800 MB plików graficznych (po nieskompresowaniu). Ftp naszej firmy hostingowej działa bardzo wolno, więc wyodrębnianie wszystkich plików lokalnie i wysyłanie ich przez ftp nie jest praktyczne. Byłem w stanie ftp pliku .tar.gz do naszej witryny hostingowej, ale kiedy ssh do mojego katalogu i spróbuj użyć rozpakowania, pojawia się ten błąd:

[esthers@clients locations]$ unzip community_images.tar.gz
Archive:  community_images.tar.gz
  End-of-central-directory signature not found.  Either this file is not a zipfile, or it constitutes one disk of a multi-part archive.  In the latter case the central directory and zipfile comment will be found on the last disk(s) of this archive.
note:  community_images.tar.gz may be a plain executable, not an archive
unzip:  cannot find zipfile directory in one of community_images.tar.gz or community_images.tar.gz.zip, and cannot find community_images.tar.gz.ZIP, period.

Jakiego polecenia należy użyć, aby wyodrębnić wszystkie pliki z pliku .tar.gz?

EmmyS
źródło

Odpowiedzi:

1390

Wpisz man tarwięcej informacji, ale to polecenie powinno załatwić sprawę:

tar -xvzf community_images.tar.gz

Aby wyjaśnić trochę dalej, smoła zebrano wszystkie pliki w jednym opakowaniu community_images.tar. Program gzip zastosował kompresję, stąd rozszerzenie gz. Tak więc polecenie wykonuje kilka czynności:

  • f: musi to być ostatnia flaga polecenia, a tar f ile musi nastąpić natychmiast po. Podaje tar nazwę i ścieżkę skompresowanego pliku.
  • z: mówi tarowi, aby rozpakował archiwum przy użyciu g z ip
  • x: Tar może gromadzić pliki lub e x oddechowych im. xrobi to drugie.
  • v: sprawia, że ​​smoła dużo mówi. Wyjście V erbose pokazuje wszystkie rozpakowane pliki.
djeikyb
źródło
5
@Shiki Widziałem twoją proponowaną edycję. Nie sądzę, aby była to odpowiednia zmiana, wolę sposób, w jaki wyjaśniłem to narzędzie. Myślę , że twoja tar -xfsugestia byłaby świetną dodatkową odpowiedzią.
djeikyb
3
To jedno z lepszych wyjaśnień spośród milionów podobnie sformułowanych pytań
JohnMerlino,
1
@KasunSiyambalapitiya Domyślnie kończy się w bieżącym folderze. Zobacz także man tar; poszukaj -Copcji. A może sprawdź drugą odpowiedź 😉
djeikyb
6
Przypomina mi artykuł xckd o tar. Muszę wracać za każdym razem.
mgarey
19
Mój pamięciowy na to: x oddechowych oo e v *** ing f iles.
Agargara,
172

Jeśli chcesz, aby pliki zostały wyodrębnione do określonego miejsca docelowego, możesz dodać. Najpierw utwórz katalog, w tym przypadku: ~ / Pictures / Community-C /destination/path/

Przykład:

mkdir ~/Pictures/Community
tar xf community_images.tar.gz -C /home/emmys/Pictures/Community/

Można łatwo zapamiętać, jeśli wziąć pod uwagę, mówiąc tar e X pokarmowy F Ile

gif procesu wykonanego na terminalu

Uwaga: Pamiętaj, że możesz wyszukiwać wewnątrz stron podręcznika z ?+ perspektywie szukać, a następnie ni N, aby przejść do następnego lub poprzedniego wystąpienia tego słowa, którego szukasz.

JorgeArtware
źródło
5
nie zapomnij o C dla „ c hange directory”! również uważam, że lepiej nie mieszać opcji łącznika i nie łącznika (szczególnie mylące podczas używania ps).
djeikyb
2
Dlaczego nie jest tak jak w przypadku każdego innego polecenia?
Jan M.
6
Uwielbiam twoją wskazówkę „tar to e X tract a F ile”
Nam G VU
2
1+ za animowany gif
Nick Steele,
Można również użyć --directory="/home/emmys/Pictures/Community/"(co moim zdaniem jest łatwiejsze do zapamiętania niż -C).
Patrick Dark
107

W pewnym momencie tarzostał zaktualizowany do automatycznego dekompresji. Teraz potrzebujesz tylko:

tar xf community_images.tar.gz

Obowiązuje to samo wyjaśnienie:

  • f: musi to być ostatnia flaga polecenia, a tar f ile musi nastąpić natychmiast po. Podaje tar nazwę i ścieżkę skompresowanego pliku.
  • x: e x traktuje pliki.

Zwróć uwagę na brak łącznika dla flag poleceń. Wynika to z faktu, że większość wersji tar zezwala zarówno na opcje w stylu GNU, jak i BSD (upraszczając, GNU wymaga łącznika, BSD nie).

djeikyb
źródło
1
Czy jest na to jakaś dokumentacja? Wszędzie szukałem odniesienia do tego, nigdy nie używam flagi -z i wszystko jest spakowane, więc martwiłem się, że w ogóle nie kompresowałem moich plików tar, haha. Dzięki.
neurosnap,
2
@neurosnap patrz instrukcja gnu i instrukcja bsd
djeikyb
3
Prawdopodobnie lepiej byłoby edytować oryginalną odpowiedź.
Seth
3
@Seth czuje się / czuł wystarczająco wyraźnie, by stanowić osobną odpowiedź, szczególnie w kontekście destrukcyjnej edycji, która ją sprowokowała. Przemyślę to jednak po pracy, może to być prostszy sposób na połączenie, niż początkowo myślałem.
djeikyb
2
@EnricoMariaDeAngelis bsd tar od co najmniej 2004 r. I gnu tar od co najmniej 2010 r. Obsługują automatyczne wybieranie dekompresora. możliwe, że żadna „najnowsza” (w tym wieku? dziewięćdziesiątych +?) wersja tar nie wymaga ręcznego wyboru dekompresora.
djeikyb
11

Zapamiętywanie wszystkich flag tarmoże być żmudne. Obowiązkowe XKCD:

wprowadź opis zdjęcia tutaj

Dlatego stworzyłem własny skrypt w Pythonie, aby to zrobić. Szybki, brudny, cppodobny do użycia:

#!/usr/bin/env python3
import tarfile,sys,os
tf = tarfile.open(name=sys.argv[1],mode='r:gz')
where = '.'
if len(sys.argv) == 3:
    where = sys.argv[2]
tf.extractall(path=where)
tf.close()

Użyj go w ten sposób:

myuntar.py archive.tar

Zobacz także podobny skrypt do rozpakowywania archiwów zip .

Sergiy Kolodyazhnyy
źródło
2
:) tylko dwie flagi tar do zapamiętania -cafdo tworzenia na podstawie nazwy pliku i -xfdo wyodrębniania (AFAIK działa na każdym typie tar).
Videonauth,
@Videonauth Wiem, to nie jest tak skomplikowane, ale z jakiegoś powodu nigdy nie pamiętam tych opcji. Może dlatego, że nie dość często zajmuję się archiwami.
Sergiy Kolodyazhnyy
czy to zrobi tylko spakowane pliki tar? Dokumenty api wspominają tryb czytania z przezroczystą kompresją; czy to by się bardziej zachowywało tar xf <file>?
djeikyb
7

Szybka odpowiedź:

tar -xvf  <.tar file> or <.tar.xz file>
tar -xzvf <.tar.gz file>
tar -xjvf <.tar.bz2 file>

[ UWAGA ]:

  • -v Pełna lista przetworzonych plików.
  • -z Przefiltruj archiwum przez gzip.
  • -f Użyj pliku archiwum lub ARCHIWUM urządzenia.
  • -x Wyodrębnij pliki z archiwum.
  • -j bzip2.
  • tar -xfarchive.tar # Wyodrębnij wszystkie pliki z archive.tar.
Benyamin Jafari
źródło
4

Jeśli nie możesz wyodrębnić .tar.gzpliku za pomocą

tar -xvzf fileName.tar.gz

Spróbuj wyodrębnić za pomocą

tar xf fileName.tar.gz
Shravan40
źródło
4
jeśli jest to skompresowany plik tar, pierwsze polecenie zawsze będzie działać. jeśli to nie działa, nie masz spakowanego pliku tar. to drugie polecenie jest świetną rekomendacją dla osób, które nie dbają o algorytm kompresji zastosowany w pliku tar.
djeikyb
0

Możesz to zrobić również w pierwszym kroku:

gunzip community_images.tar.gz

Następnie masz plik: community_images.tar

Drugi krok to:

tar -xvf community_images.tar

Plik * .tar zostanie wyodrębniony.

dschinn1001
źródło
0

tar xvf file.tar.gz

  • x dla wyciągu
  • v dla pełnych (lista plików)
  • f dla nazwy pliku jest następny

Każda zdalnie nowoczesna wersja tar powinna automatycznie wykrywać, że archiwum jest gzipowane i dodać „z” dla ciebie.

delt
źródło