Untar, ungz, gz, tar - как вы запомнили все полезные опции?


76

Я почти уверен, что я не единственный, кто сталкивается со следующей проблемой: каждый раз, когда мне нужно распаковать файл в * nix, я не могу вспомнить все параметры и заканчиваю поиском в Google, что удивительно, учитывая, как часто мне нужно сделай это.

У вас есть хорошая шпаргалка? Или как насчет мнемоники для всех этих неприятных переключателей в tar?

Я делаю эту статью вики, чтобы мы могли создать хороший шпаргалку здесь.

Да, и о man-страницах: есть одна вещь, для которой они не полезны, это чтобы выяснить, как распаковать файл.


1
используйте страницы справочника, тогда вам не нужно создавать вики, нужно только запомнить команду man :-) man (1)
Florenz Kley

9
ЭКСТРАКТ Zee файл, как я помню
канадский Лука восстановило MONICA

Создание Zee Vocking File может быть подходящим для создания .tar.gz
CousinCocaine

Ответы:


65

Или как насчет использования оболочки с расширенными возможностями завершения (например, zsh или свежей версией bash), которая дополнит ваши параметры всесторонней помощью? :))

Что касается tar: просто посмотрите на клавиатуру "qwerty". Есть буквы "zxcvf" рядом друг с другом. Вам нужны либо «tar czvf file.tar.gz файлы», либо «tar xzvf file.tar.gz».


Рекомендую ответить на этот вопрос :)

Теперь это крутой совет "qwerty"! :)

офигенно круто!
DeadProgrammer

2
Другой совет заключается в том, что zопция (или jопция для .bz2файлов) не требуется при извлечении с современными версиями tar. Он автоматически распаковывает файл.
Nate

10
Я использовал tar около десяти миллиардов раз и никогда не замечал, что все наиболее часто используемые опции находятся рядом друг с другом на клавиатуре. Headsck
Тайлер МакГенри

41

Обзор опций Tar

Вы можете редактировать это, чтобы добавить больше эзотерических переключателей, но вот основы:

  • x - извлечь файлы
  • c - создать архив
  • t - список файлов
  • v - подробный (список файлов по мере их обработки)
  • j - использовать сжатие bz2
  • z - использовать сжатие gz
  • f - читать или записывать файлы на диск

Примеры

Распакуйте файл tar.gz: tar zxf tarball.tar.gz

Распакуйте файл tar.bz2: tar jxf tarball.tar.bz2

Создайте файл tar.gz: tar zcvf tarvall.tar.gz mydir / *


23

Есть небольшой скрипт на Perl под названием «unp».

unp filename.tar.gz

... и это все извлекает. Работает с любым сжатым файлом, если у вас есть нужные двоичные файлы. И ты просто забываешь о синтаксисе или любом другом дерьме. Проверьте репозитории вашего дистрибутива Linux. Это должно быть там (по крайней мере, в Arch, Debian и Ubuntu).


Даже после долгого использования tar мне все равно нужно гуглить из-за глупых флагов. Unp это путь.
Яда

8

Действительно при частом использовании я делаю различие между извлечением (x) данных и сжатием (c) данных:

Извлекать:

tar xzf data.tgz

Сжать:

tar czf data.tgz

Кроме того, вы можете добавить две функции в ваш .bashrc:

function extract () {     
        if ($# -ne 1); then
                echo "Usage: $0  `<compressed archive>"`
                exit 1
        fi
        tar xzf $1
}

function compress () {
        if ($# -ne 2); then
                echo "Usage: $0 `<compressed archive> <files|directories>"`
                exit 1
        fi
        tar czf $1 $2
}

Есть еще одна приятная функция извлечения, она определяет расширение вашего сжатого файла и делает всю работу за вас:

extract () {
   if [ -f $1 ] ; then
       case $1 in
           *.tar.bz2)   tar xvjf $1    ;;
           *.tar.gz)    tar xvzf $1    ;;
           *.bz2)       bunzip2 $1     ;;
           *.rar)       unrar x $1       ;;
           *.gz)        gunzip $1      ;;
           *.tar)       tar xvf $1     ;;
           *.tbz2)      tar xvjf $1    ;;
           *.tgz)       tar xvzf $1    ;;
           *.zip)       unzip $1       ;;
           *.Z)         uncompress $1  ;;
           *.7z)        7z x $1        ;;
           *)           echo "don't know how to extract '$1'..." ;;
       esac
   else
       echo "'$1' is not a valid file!"
   fi
 }

5

Просто напечатайте tar --helpи вот ваш чит-лист.


12
серьезно, вы когда-нибудь пытались прочитать эту справочную страницу?
DeadProgrammer

Это может быть немного нечитаемо и долго, но я думаю, что это хорошо работает только для поиска названия опции. Вы также можете использовать grep для опции, которую вы ищете, то есть 'tar --help | grep extract '.
Джереми Рутен

1
Отлично. А затем вам нужно пройтись по man-странице, которая (среди того, что вы ищете) расскажет вам тонны архаичных команд и опций стримера, которых нет ни у кого, кроме потребностей разработчика.

2
Я действительно не понимаю, что в этом такого сложного. Чтобы извлечь архив, просто найдите опцию extract и добавьте -x к вашей команде. Если вы хотите, чтобы он был подробным, найдите эту опцию и добавьте av, чтобы получить -xv. Затем продолжайте, пока не получите точную команду, которую вы хотите. В нем даже есть примеры команд для общих операций.
Джереми Рутен

1
Джереми, настоящая проблема в том, что ты не всегда знаешь правильный словарный запас. Таким образом, легко запутаться и найти похожие варианты, чтобы они не работали. Затем вы должны разместить (некоторые) из них в правильном порядке. Это нетривиально для тех, кто мигрирует из Windows. Тем более, если они не знали сценариев в Windows.
Назадус

3

Если у вас возникли проблемы с запоминанием параметров tar, попробуйте использовать pipe:

  • zcat file.tar.gz | tar xvf -
  • bzcat file.tar.bz2 | tar xvf -

Замените tar xvна, tar tvчтобы просто просмотреть содержимое тарбола.

Лично я использую следующую мнемонику:

  • t, x или c для «табулирования», «извлечения» или «создания» соответственно.
  • v для перечисления всех файлов.
  • z, j или ничего для tar.gz, tar.bz2 или простого .tar соответственно.
  • f для указания имени файла по сравнению с использованием по умолчанию stdin / stdout или ленточного устройства.

Хотя «j» и «bzip2», похоже, не имеют ничего общего друг с другом, мне легко запомнить это исключение.

Кроме того, мне смешно, что Googling заменил «man tar».


Вы должны иметь привычку всегда предоставлять fопцию: только по умолчанию дистрибутивы tar по умолчанию равны f -, исторический по умолчанию равен f /dev/rmt0или подобен. В конце концов, tar - это Tape ARchiver.
Эфимент

1
что такое табулирование?
Клавдиу


2

Три наиболее часто используемые операции :

--create -c

Создайте новый архив tar.

--list -t

Список содержимого архива.

--extract -x

Извлеките одного или нескольких участников из архива.


Пять расширенных операций с tar :

--append -r

Добавить новые записи в архив, который уже существует.

--update -u

Добавьте более поздние копии участников архива в конец архива, если они существуют.

--concatenate --catenate -A

Добавьте один или несколько уже существующих архивов в конец другого архива.

--delete

Удалить элементы из архива (не работает на лентах).

--compare --diff -d

Сравните участников архива с их аналогами в файловой системе.



2

Я всегда зачитываю команды в уме, печатая

сжать подробный zip-файл

tar cvzf FILE

извлечь подробный почтовый файл ФАЙЛ

tar xvzf FILE

2

Я делаю следующее

Чтобы создать tar:

tar czvf foo.tar.gz <files to be included>

Распаковать:

tar zxvf foo.tar.gz

Это должны быть основные переключатели, о которых вам нужно беспокоиться:

c - create
z - compress/uncompress
x - extracte
v - verbose
f - file

Пока вы пытаетесь перемещать файлы по каталогам, вы можете делать некоторые более интересные вещи, такие как tar и untar inline:

tar cf - <files to be copied> | (cd <target directory>; tar xvf - )

1

90% времени я просто использую

tar -xvf file.*  

x: extract
v: быть подробным (необязательно)
f: входной файл (tar, gz, bzip2 и т. д.)

Полегче, а? :)
Используйте Fileroller или Ark, если вы не в консоли.


До сих пор я использовал fileroller, но в настоящее время мне не повезло, потому что у меня есть версия, использующая 1,1 ГБ памяти.
Эндрю Гримм

1

Я использую Perl-скрипт под названием aunpack, часть проекта atool , уже много лет. Итак, вы просто запускаете: aunpack foo.{zip/tar.gz/tar.bz2}и он делает правильные вещи, основываясь на расширении файла.

Другое преимущество aunpackзаключается в том, что он не будет загрязнять текущий каталог большим количеством файлов. Скажем, есть 20 файлов foo.zip, которые не находятся в подкаталоге. Вместо того, чтобы извергать эти файлы в текущем каталоге, aunpackсоздайте fooподкаталог и поместите туда все файлы.


1

Все , что вам нужно tar x(выдержка из стандартного ввода), tar c(деготь на стандартный вывод), gzip -c(GZIP из стандартного ввода на стандартный вывод, -1чтобы -9для уровней сжатия, то же самое касается bzip2) и gunzip -c(Gunzip из стандартного ввода на стандартный вывод) - все остальное трубы.

Для tar и gzip:

$ tar c * | gzip -c > out.tar.gz

Разархивировать и распаковать

$ gunzip -c < out.tar.gz | tar x

Если вы хотите сладкие индикаторы выполнения, используйте pv, который похож на cat, но показывает индикаторы выполнения:

$ tar c * | bzip2 -c | pv > out.tar.gz
 22.6MiB 0:00:03 [3.64MiB/s] [  <=>                           ]
$ pv in.tar.gz | bunzip2 -c | tar x
   80MiB 0:00:00 [  58MiB/s] [===============================>] 100%

0

Я думаю, что легко думать о том, что вы хотите, а не только некоторые буквы.

Чтобы проиллюстрировать это, я буду использовать пример того, как извлечь file.tar.gz:

Поскольку это tar-файл, вы должны использовать программу tar. Тогда это варианты:

  1. х , так как вы хотите е х путей.
  2. z, если файл заканчивается на .gz. (в имени файла указывается gz после tar). Этот параметр архивирует архив.
  3. f для файла, за которым следует имя архива.

Это продемонстрировано в примере ниже:

tar xzf file.tar.gz

0

Насколько я помню, это всегда "tar XXvf", где два X

  • х для е Х тракта или с для С reate и,
  • либо z = gzip, j = bzip2 (gzip встречается чаще, так что обычно это z, по какой-то причине j = bzip2 просто застрял в моей голове).

Иногда вы сталкиваетесь со сжатыми, но не заархивированными файлами, где добавляете un к любому типу сжатия. например, g un zip или b un zip2.

Если что, я забываю 2, а иногда и "bzip".


0

Вы также можете создать псевдоним. просто добавьте эти две строки в ваш ~/.bash_aliasesфайл:

alias untar="tar xvf"
alias dotar="tar cvf"

затем вы можете использовать untar foo.tar.gzдля извлечения и dotar foo.barсжатия. Вы можете использовать другие псевдонимы, которые легко запомнить.


0

C reate Z ф на F ilename

tar -czf myfile.tar.gz myfile.sql

е X тракта Z внутрибрюшинно F ilename

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