Яку команду мені потрібно розпакувати / витягнути .tar.gz файл?


830

Я отримав величезний файл .tar.gz від клієнта, який містить близько 800 мб файлів зображень (при нестисненні.) Ftp нашої компанії, що приймає хостинг, серйозно повільний, тому витягування всіх файлів локально та надсилання їх через ftp не є практичним. Мені вдалося перенести файл .tar.gz на наш хостинг-сайт, але коли я потрапляю у свій каталог і намагаюся скопіювати розпакування, він видає мені цю помилку:

[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.

Яку команду мені потрібно використовувати для витягування всіх файлів у файлі .tar.gz?

Відповіді:


1390

Введіть man tarдодаткову інформацію, але ця команда повинна виконати фокус:

tar -xvzf community_images.tar.gz

Щоб пояснити трохи далі, дьоготь зібрані всі файли в один пакет, community_images.tar. Програма gzip застосувала стиснення, отже, розширення gz. Отже команда робить кілька речей:

  • f: Це повинно бути останнім прапором команди, і дьоготь е Іла повинен бути відразу ж після. Він повідомляє tar ім'я та шлях стисненого файлу.
  • z: каже tar для розпакування архіву за допомогою g z ip
  • x: tar може збирати файли або їх x трактувати. xчи робить останнє.
  • v: змушує багато розмовляти з дьогтем. V вихід erbose показує всі файли витягуються.

5
@Shiki Я побачив запропоновані вами зміни. Я не думаю, що це відповідна зміна, я віддаю перевагу тому, як я пояснив цей інструмент. Я дійсно думаю , що ваше tar -xfпропозиція буде зробити великий додатковий відповідь.
djeikyb

3
Це одне з кращих пояснень із мільйонів подібних
фраз

1
@KasunSiyambalapitiya За замовчуванням потрапляє у поточну папку. Дивіться також man tar; шукайте -Cваріант. Чи, можливо, ознайомтеся з іншою відповіддю dje
djeikyb

6
Нагадує статтю xckd про дьоготь. Я маю щоразу повертатися.
mgarey

19
Моя мнемонічні для цього: х шляхів г е v *** ь F Іль.
Агаргара

172

Якщо ви хочете, щоб файли були вилучені до певного пункту призначення, ви можете додати Переконайтеся, що спочатку складіть каталог, у цьому випадку: ~ / Pictures / Community-C /destination/path/

Приклад:

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

Ви можете легко запам'ятати, якщо ви вважаєте , кажучи дьоготь по електронній X тракт F Ile

gif процесу, виконаного на терміналі

Примітка. Пам'ятайте, що ви можете шукати всередині чоловічих сторінок з ?+ терміном, щоб шукати, а потім nі Nпереходити до наступного чи попереднього екземпляра потрібного терміна.


5
не забудьте C для " каталогу c hange"! Крім того, я вважаю, що краще не змішувати параметри дефісів і дефісів (особливо це заплутано при використанні ps).
djeikyb

2
Чому це не так, як будь-яка інша команда коли-небудь?
Ян М.

6
Я люблю твій натяк: «тар до e X урочище F ile»
Nam G VU

2
1+ для анімаційного анімаційного фільму
Нік Стіл

Можна також використовувати --directory="/home/emmys/Pictures/Community/"(що, на мою думку, легше запам’ятати, ніж -C).
Патрік Темний

107

У якийсь момент tarбув модернізований до автоматичного розпакування. Все, що вам зараз потрібно:

tar xf community_images.tar.gz

Це ж пояснення стосується:

  • f: Це повинно бути останнім прапором команди, і дьоготь е Іла повинен бути відразу ж після. Він повідомляє tar ім'я та шлях стисненого файлу.
  • x: e х трактувати файли.

Зверніть увагу на відсутність дефісів для командних прапорів. Це пояснюється тим, що більшість версій tar дозволяють використовувати параметри стилю gnu та bsd (спрощено, gnu потрібен дефіс, bsd - не).


1
Чи є на це документація? Я шукав по всьому посилання на це, я ніколи не використовую прапор -z, і все стає gzipped, тому я хвилювався, якщо я взагалі не стискав свої тарелки, ха-ха. Дякую.
neurosnap

2
@neurosnap дивіться посібник з gnu та керівництво bsd
djeikyb

3
Напевно, було б краще відредагувати оригінальну відповідь.
Сет

3
@ Здається, він відчуває / відчуває себе досить чітко, щоб отримати окрему відповідь, особливо в контексті деструктивної редакції, яка його спровокувала. Я переосмислю це після роботи, можливо, це буде простіший спосіб злиття, ніж я спочатку думав.
djeikyb

2
@EnricoMariaDeAngelis bsd tar з принаймні 2004 року та gnu tar з принаймні 2010 року підтримують автоматичний вибір декомпресора. можливо, жодна "остання" (в цьому столітті? дев'яностих +?) версія дьогтю не вимагає ручного вибору декомпресора.
djeikyb

11

Запам'ятовування всіх прапорів для tarможе бути втомливим. Обов’язковий XKCD:

введіть тут опис зображення

Тому я зробив свій власний маленький сценарій у Python, щоб це зробити. Швидкий, брудний, cpяк у використанні:

#!/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()

Використовуйте його так:

myuntar.py archive.tar

Дивіться також подібний скрипт для розпакування zip-архівів .


2
:) лише два прапорці tar, які слід пам’ятати -cafдля створення на основі імені файлу та -xfдля вилучення (AFAIK працює на кожному типі tar).
Videonauth

@Videonauth Я знаю, це не так складно, але я чомусь ніколи не пам'ятаю цих варіантів. Можливо тому, що я не маю справу з архівами досить часто.
Сергій Колодяжний

це робитимуть лише файли gzipped tar? api docs згадують режим читання з прозорим стисненням; чи так би поводився tar xf <file>?
djeikyb

7

Швидкий відповідь:

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

[ ПРИМІТКА ]:

  • -v Докладно перераховуйте файли, які обробляються.
  • -z Фільтр архіву через gzip.
  • -f Використовуйте архівний файл або пристрій ARCHIVE.
  • -x Витяг файлів з архіву.
  • -j bzip2.
  • tar -xfarchive.tar # Витягнути всі файли з archive.tar.

4

У випадку, якщо ви не можете витягнути .tar.gzфайл за допомогою

tar -xvzf fileName.tar.gz

Спробуйте витягнути за допомогою

tar xf fileName.tar.gz

4
якщо це gzipped файл tar, перша команда завжди буде працювати. якщо це не працює, у вас немає файлу gzipped tar. остання команда - чудова рекомендація для людей, яким не байдуже, який алгоритм стиснення використовувався у файлі tar.
djeikyb

0

Ви можете зробити це також на першому кроці:

gunzip community_images.tar.gz

Тоді у вас є файл: community_images.tar

Другим кроком буде:

tar -xvf community_images.tar

І файл * .tar буде вилучений.


0

tar xvf file.tar.gz

  • х для витягу
  • v для багатослівного (список файлів)
  • f для назви файла наступний

Будь-яка віддалена сучасна версія tar повинна автоматично виявити, що архів gzipped, і додати "z" для вас.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.