Jak wyodrębnić pliki z pliku .tar.gz lub .tar.bz2 w systemie Linux

Pliki tar są archiwami skompresowanymi. Napotkasz je często podczas korzystania z dystrybucji Linuksa, takiej jak Ubuntu, a nawet podczas korzystania z terminala w systemie macOS. Oto jak wyodrębnić – lub rozpakować – zawartość pliku tar, znanego również jako archiwum.

Co oznacza .tar.gz i .tar.bz2?

Pliki z rozszerzeniem .tar.gz lub .tar.bz2 są skompresowanymi plikami archiwów. Plik z rozszerzeniem .tar jest nieskompresowany, ale zdarza się to bardzo rzadko.

Część .tar rozszerzenia pliku oznacza archiwum taśmowe i jest powodem, dla którego oba te typy plików nazywane są plikami tar. Pliki tar pochodzą z roku 1979, kiedy utworzono polecenie tar, aby umożliwić administratorom systemu archiwizowanie plików na taśmie. Czterdzieści lat później nadal używamy polecenia tar do wypakowywania plików tar na nasze dyski twarde. Ktoś gdzieś prawdopodobnie nadal używa smoły z taśmą.

Przyrostek rozszerzenia .gz lub .bz2 wskazuje, że archiwum zostało skompresowane przy użyciu algorytmu kompresji gzip lub bzip2. Polecenie tar będzie dobrze działać z obydwoma typami plików, więc nie ma znaczenia, która metoda kompresji została użyta – i powinna być dostępna wszędzie, gdzie masz powłokę Bash. Wystarczy użyć odpowiednich opcji wiersza poleceń tar.

Wyodrębnianie plików z plików Tar

Załóżmy, że pobrałeś dwa pliki z nutami. Jeden plik nazywa się ukulele_songs.tar.gz, a drugi guitar_songs.tar.bz2. Te pliki znajdują się w katalogu Pobrane.

Dwa pliki tar w katalogu pobierania

Wyodrębnijmy piosenki ukulele:

tar -xvzf ukulele_songs.tar.gz

Po rozpakowaniu plików są one wyświetlane w oknie terminala.

Wyodrębnienie wszystkich plików z pliku tar

Opcje wiersza poleceń, których użyliśmy, to:

-x: Wypakuj, pobierz pliki z pliku tar.
-v: Pełne, wyświetla pliki w trakcie ich rozpakowywania.
-z: Gzip, użyj gzip do zdekompresowania pliku tar.
-f: Plik, nazwa pliku tar, z którym ma pracować. Po tej opcji musi następować nazwa pliku tar.

Wypisz pliki w katalogu za pomocą ls, a zobaczysz, że został utworzony katalog o nazwie Ukulele Songs. Wyodrębnione pliki znajdują się w tym katalogu. Skąd się wziął ten katalog? Był zawarty w pliku tar i został rozpakowany wraz z plikami.

Katalog Ukulele Songs utworzony w katalogu Downloads

Teraz wyodrębnijmy piosenki gitarowe. Aby to zrobić, użyjemy prawie dokładnie tego samego polecenia, co poprzednio, ale z jedną ważną różnicą. Przyrostek rozszerzenia .bz2 mówi nam, że został skompresowany za pomocą polecenia bzip2. Zamiast używać opcji-z (gzip), użyjemy opcji -j (bzip2).

tar -xvjf guitar_songs.tar.bz2

Wyodrębnienie pliku tar utworów gitarowych w folderze Pobrane

Po raz kolejny pliki są wyświetlane na terminalu podczas rozpakowywania. Żeby było jasne, opcje wiersza poleceń, których użyliśmy z tar dla pliku .tar.bz2, to:

-x: Wypakuj, pobierz pliki z pliku tar.
-v: Pełne, wyświetla pliki w trakcie ich rozpakowywania.
-j: Bzip2, użyj bzip2 do zdekompresowania pliku tar.
-f: plik, nazwa pliku tar, z którym ma pracować.

Jeśli wymienimy pliki w katalogu pobierania, zobaczymy, że został utworzony inny katalog o nazwie Guitar Songs.

Katalog utworów gitarowych utworzony w katalogu Pobrane

Wybór miejsca wyodrębnienia plików

Jeśli chcemy wyodrębnić pliki do lokalizacji innej niż bieżący katalog, możemy określić katalog docelowy za pomocą opcji -C (określony katalog).

tar -xvjf guitar_songs.tar.gz -C ~/Documents/Songs/

Patrząc na nasz katalog Dokumenty / Piosenki, zobaczymy, że został utworzony katalog Guitar Songs.

Katalog utworów gitarowych utworzony w katalogu Documents / Songs

Zauważ, że katalog docelowy musi już istnieć, tar nie utworzy go, jeśli go nie ma. Jeśli chcesz utworzyć katalog i wypakować do niego wszystkie pliki tar za pomocą jednego polecenia, możesz to zrobić w następujący sposób:

mkdir -p ~/Documents/Songs/Downloaded && tar -xvjf guitar_songs.tar.gz -C ~/Documents/Songs/Downloaded/

Opcja -p (rodzice) powoduje, że mkdir tworzy wszystkie wymagane katalogi nadrzędne, zapewniając utworzenie katalogu docelowego.

Zaglądanie do plików smoły przed ich wyodrębnieniem

Do tej pory po prostu zrobiliśmy krok wiary i wyodrębniliśmy pliki niewidoczne. Możesz chcieć spojrzeć, zanim skoczysz. Możesz przejrzeć zawartość pliku tar przed wyodrębnieniem go, używając opcji -t (lista). Zwykle wygodnie jest przesłać wyjście potokiem za pomocą polecenia less.

tar -tf ukulele_songs.tar.gz | less

Zauważ, że nie musimy używać opcji -z, aby wyświetlić listę plików. Musimy tylko dodać opcję -z, gdy wypakowujemy pliki z pliku .tar.gz. Podobnie, nie potrzebujemy opcji -j, aby wyświetlić listę plików w pliku tar.bz2.

Zawartość pliku tar przesłana potokowo przez less

Przewijając dane wyjściowe, widzimy, że wszystko w pliku tar jest przechowywane w katalogu o nazwie Ukulele Songs, aw tym katalogu znajdują się pliki i inne katalogi.

Drugi widok zawartości pliku tar przesłany potokowo przez less

Widzimy, że katalog Ukulele Songs zawiera katalogi o nazwie Random Songs, Ramones i Possibles.

Aby wyodrębnić wszystkie pliki z katalogu w pliku tar, użyj następującego polecenia. Zwróć uwagę, że ścieżka jest ujęta w cudzysłowy, ponieważ zawiera spacje.

tar -xvzf ukulele_songs.tar.gz "Ukulele Songs/Ramones/"

Wyodrębnianie pojedynczego folderu z pliku tar

Aby wyodrębnić pojedynczy plik, podaj ścieżkę i nazwę pliku.

tar -xvzf ukulele_songs.tar.gz "Ukulele Songs/023 - My Babe.odt"

Wyodrębnianie pojedynczego pliku z pliku tar

Możesz wyodrębnić wybrane pliki za pomocą symboli wieloznacznych, gdzie * reprezentuje dowolny ciąg znaków, a? reprezentuje dowolny pojedynczy znak. Używanie symboli wieloznacznych wymaga użycia opcji –wildcards.

tar -xvz --wildcards -f ukulele_songs.tar.gz "Ukulele Songs/Possibles/B*"

Wydobywanie piosenek z tar za pomocą symboli wieloznacznych

Wyodrębnianie plików bez wyodrębniania katalogów

Jeśli nie chcesz, aby struktura katalogów w pliku tar była odtwarzana na dysku twardym, użyj opcji –strip-components. Opcja –strip-components wymaga parametru numerycznego. Liczba reprezentuje liczbę poziomów katalogów do zignorowania. Pliki z ignorowanych katalogów są nadal wyodrębniane, ale struktura katalogów nie jest replikowana na dysku twardym.

Jeśli w naszym przykładowym pliku tar określimy –strip-components = 1, na dysku twardym nie zostanie utworzony najwyższy katalog utworów Ukulele w pliku tar. Pliki i katalogi, które zostałyby wyodrębnione do tego katalogu, są wyodrębniane w katalogu docelowym.

tar -xvzf ukulele_songs.tar.gz --strip-components=1

Wyodrębnianie plików z pliku tar za pomocą --strip-components = 1

W naszym przykładowym pliku tar są tylko dwa poziomy zagnieżdżenia katalogów. Więc jeśli użyjemy –strip-components = 2, wszystkie pliki zostaną wypakowane do katalogu docelowego i żadne inne katalogi nie zostaną utworzone.

tar -xvzf ukulele_songs.tar.gz --strip-components=2

Wyodrębnianie plików z pliku tar z --strip-components = 2

Jeśli spojrzysz na Linux strona podręcznika zobaczysz, że tar musi być dobrym kandydatem na tytuł „polecenie mające najwięcej opcji wiersza poleceń”. Na szczęście, abyśmy mogli wyodrębnić pliki z plików .tar.gz i tar.bz2 z dobrym stopniem szczegółowej kontroli, musimy pamiętać tylko o kilku z tych opcji.