Как да извлечете файлове от .tar.gz или .tar.bz2 файл в Linux

Tar файловете са компресирани архиви. Ще ги срещате често, докато използвате дистрибуция на Linux като Ubuntu или дори докато използвате терминала на macOS. Ето как да извлечете — или да разопаковате — съдържанието на tar файл, известен също като tarball.

Какво означават .tar.gz и .tar.bz2?

Файловете с разширение .tar.gz или .tar.bz2 са компресирани архивни файлове. Файл само с разширение .tar е некомпресиран, но това ще бъде много рядко.

Частта .tar от разширението на файла означава лентов архив и е причината и двата типа файлове да се наричат ​​tar файлове. Tar файловете датират чак от 1979 г., когато е създадена командата tar, за да позволи на системните администратори да архивират файлове на лента. Четиридесет години по-късно все още използваме командата tar за извличане на tar файлове на нашите твърди дискове. Някой някъде вероятно все още използва катран с лента.

Суфиксът на разширението .gz или .bz2 показва, че архивът е компресиран, като се използва алгоритъма за компресиране на gzip или bzip2. Командата tar ще работи успешно и с двата типа файлове, така че няма значение кой метод за компресиране е използван — и тя трябва да е достъпна навсякъде, където имате обвивка на Bash. Просто трябва да използвате съответните опции на командния ред tar.

Извличане на файлове от Tar файлове

Да приемем, че сте изтеглили два файла с ноти. Единият файл се нарича ukulele_songs.tar.gz, а другият се нарича guitar_songs.tar.bz2. Тези файлове са в директорията за изтегляния.

  Как да инсталирате темата за икони Moka на Linux

Нека извлечем песните за укулеле:

tar -xvzf ukulele_songs.tar.gz

Тъй като файловете се извличат, те са изброени в прозореца на терминала.

Опциите на командния ред, които използвахме са:

-x: Извличане, извличане на файловете от tar файла.
-v: Подробно, избройте файловете, докато се извличат.
-z: Gzip, използвайте gzip, за да декомпресирате tar файла.
-f: Файл, името на tar файла, с който искаме да работи tar. Тази опция трябва да бъде последвана от името на tar файла.

Избройте файловете в директорията с ls и ще видите, че е създадена директория, наречена Ukulele Songs. Извлечените файлове са в тази директория. Откъде дойде тази директория? Той се съдържаше в tar файла и беше извлечен заедно с файловете.

Сега нека извлечем песните на китарата. За да направим това, ще използваме почти същата команда, както преди, но с една важна разлика. Суфиксът на разширението .bz2 ни казва, че е компресиран с помощта на командата bzip2. Вместо да използваме опцията -z (gzip), ще използваме опцията -j (bzip2).

tar -xvjf guitar_songs.tar.bz2

Още веднъж файловете се изброяват в терминала, докато се извличат. За да бъде ясно, опциите на командния ред, които използвахме с tar за файла .tar.bz2, бяха:

-x: Извличане, извличане на файловете от tar файла.
-v: Подробно, избройте файловете, докато се извличат.
-j: Bzip2, използвайте bzip2, за да декомпресирате tar файла.
-f: Файл, име на tar файла, с който искаме да работи tar.

Ако изброим файловете в директорията за изтегляне, ще видим, че е създадена друга директория, наречена Guitar Songs.

  Как да инсталирате темата Arc за Thunderbird на Linux

Избор на къде да извлечете файловете

Ако искаме да извлечем файловете на място, различно от текущата директория, можем да посочим целева директория, използвайки опцията -C (посочена директория).

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

Поглеждайки в нашата директория Документи/Песни, ще видим, че директорията с песни за китара е създадена.

Имайте предвид, че целевата директория трябва вече да съществува, tar няма да я създаде, ако не присъства. Ако трябва да създадете директория и да извлечете файловете с tar в нея с една команда, можете да направите това, както следва:

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

Опцията -p (родители) кара mkdir да създава всички родителски директории, които са необходими, като гарантира, че целевата директория е създадена.

Разглеждане на tar файловете, преди да ги извлечете

Досега само направихме скок на вяра и извлечехме файловете невидими. Може да искате да погледнете, преди да скочите. Можете да прегледате съдържанието на tar файл, преди да го извлечете, като използвате опцията -t (списък). Обикновено е удобно изходът да се предава чрез командата less.

tar -tf ukulele_songs.tar.gz | less

Забележете, че не е необходимо да използваме опцията -z, за да изброим файловете. Трябва само да добавим опцията -z, когато извличаме файлове от .tar.gz файл. По същия начин не се нуждаем от опцията -j, за да изброим файловете във файл tar.bz2.

Превъртайки през изхода, можем да видим, че всичко в tar файла се съхранява в директория, наречена Ukulele Songs, и в тази директория има файлове и други директории.

Можем да видим, че директорията Ukulele Songs съдържа директории, наречени Random Songs, Ramones и Possibles.

  Как да инсталирате Adobe Creative Cloud приложения на Linux

За да извлечете всички файлове от директория в tar файл, използвайте следната команда. Обърнете внимание, че пътят е увит в кавички, защото има интервали в пътя.

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

За да извлечете един файл, посочете пътя и името на файла.

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

Можете да извлечете селекция от файлове, като използвате заместващи знаци, където * представлява произволен низ от знаци и ? представлява всеки единичен знак. Използването на заместващи знаци изисква използването на опцията – заместващи знаци.

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

Извличане на файлове без извличане на директории

Ако не искате структурата на директориите във файла tar да бъде пресъздадена на вашия твърд диск, използвайте опцията –strip-components. Опцията –strip-components изисква числов параметър. Числото представлява колко нива на директории да се игнорират. Файловете от игнорираните директории все още се извличат, но структурата на директориите не се репликира на вашия твърд диск.

Ако посочим –strip-components=1 с нашия примерен tar файл, най-горната директория на Ukulele Songs в tar файла не се създава на твърдия диск. Файловете и директориите, които биха били извлечени в тази директория, се извличат в целевата директория.

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

Има само две нива на влагане в директория в нашия примерен tar файл. Така че, ако използваме –strip-components=2, всички файлове се извличат в целевата директория и не се създават други директории.

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

Ако погледнете Linux man страница ще видите, че tar трябва да е добър кандидат за заглавието „команда с най-много опции на командния ред“. За щастие, за да ни позволи да извличаме файлове от .tar.gz и tar.bz2 файлове с добра степен на детайлен контрол, трябва да запомним само шепа от тези опции.