Какая команда мне нужна, чтобы распаковать / распаковать файл .tar.gz?


829

Я получил огромный файл .tar.gz от клиента, который содержит около 800 МБ файлов изображений (в несжатом виде). ​​FTP-сервер нашей хостинговой компании работает очень медленно, поэтому извлекать все файлы локально и отправлять их через FTP нецелесообразно. Я смог перенести файл .tar.gz на наш хостинг-сайт, но когда я захожу в свой каталог по ssh и пытаюсь использовать unzip, он выдает мне эту ошибку:

[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: Деготь может собирать файлы или е х ТРАКТЫ их. xделает последнее.
  • v: заставляет tar много говорить. V erbose выводит вам все извлекаемые файлы.

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

3
Это одно из лучших объяснений из миллионов одинаково сформулированных вопросов
JohnMerlino

1
@KasunSiyambalapitiya По умолчанию попадает в текущую папку. Смотрите также man tar; ищи -Cвариант. Или, может быть, проверить другой ответ 😉
djeikyb

6
Напоминает мне статью xckd о tar. Я должен возвращаться каждый раз.
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 directory"! Кроме того, я чувствую, что лучше не смешивать дефис и не дефис (особенно запутанно при использовании ps).
djeikyb

2
Почему это не -o как любая другая команда?
Jan M.

6
Мне нравится твой намек на «смолку для тебя»
Nam G VU

2
1+ для анимированного GIF
Ник Стил

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

107

В какой-то момент tarбыл обновлен до автоматической декомпрессии. Все, что вам нужно сейчас, это:

tar xf community_images.tar.gz

Это же объяснение применимо:

  • f: Это должно быть последним флагом команды, и деготь е Ила должен быть сразу же после. Он сообщает tar имя и путь к сжатому файлу.
  • x: e x tract файлы.

Обратите внимание на отсутствие дефиса для флагов команды. Это связано с тем, что большинство версий tar допускают опции стиля gnu и bsd (упрощенно, gnu требует дефис, bsd - нет).


1
Есть ли документация по этому поводу? Я все время искал ссылку на это, я никогда не использую флаг -z, и все становится сжатым, поэтому я волновался, если я вообще не сжимал свои tar-архивы, ха-ха. Благодарю.
Нейроснап

2
@neurosnap см. руководство gnu и руководство bsd
djeikyb

3
Вероятно, было бы лучше отредактировать ваш оригинальный ответ.
Сет

3
@ Кажется, что он чувствуется / чувствуется достаточно отчетливым, чтобы быть отдельным ответом, особенно в контексте разрушительного редактирования, которое спровоцировало его Я переосмыслил это после работы, хотя, возможно, это был бы более простой способ слияния, чем я первоначально думал.
djeikyb

2
@EnricoMariaDeAngelis bsd tar начиная с версии 2004 и GNU tar начиная с версии 2010 поддерживает автоматический выбор декомпрессора. Возможно, что ни одна «недавняя» (век девяностых +?) версия tar не требует ручного выбора декомпрессора.
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 Я знаю, это не так сложно, но по какой-то причине я никогда не помню эти варианты. Может быть, потому что я не занимаюсь архивами достаточно часто.
Сергей Колодяжный,

будет ли это делать только сжатые файлы tar? в документах api упоминается режим чтения с прозрачным сжатием; это будет вести себя как tar xf <file>?
Джейкиб

7

Быстрый ответ:

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

[ ПРИМЕЧАНИЕ ]:

  • -v Подробно обработан список файлов.
  • -z Фильтруйте архив через gzip.
  • -f Используйте архивный файл или устройство АРХИВ.
  • -x Извлечь файлы из архива.
  • -j bzip2.
  • tar -xfarchive.tar # Извлечь все файлы из archive.tar.

4

Если вы не можете извлечь .tar.gzфайл, используя

tar -xvzf fileName.tar.gz

Попробуйте извлечь с помощью

tar xf fileName.tar.gz

4
если это сжатый tar-файл, первая команда всегда будет работать. если это не работает, у вас нет gzip-файла tar. Последняя команда - отличная рекомендация для людей, которым все равно, какой алгоритм сжатия использовался в их tar-файле.
djikyb

0

Вы можете сделать это тоже на первом этапе:

gunzip community_images.tar.gz

Тогда у вас есть файл: community_images.tar

Второй шаг будет:

tar -xvf community_images.tar

И файл * .tar будет извлечен.


0

tar xvf file.tar.gz

  • х для извлечения
  • v для многословия (список файлов)
  • f для имени файла следующий

Любая удаленно современная версия tar должна автоматически определить, что архив распакован, и добавить «z» для вас.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.