Untar, ungz, gz, tar - как вы запомнили все полезные опции?
Я почти уверен, что я не единственный, кто сталкивается со следующей проблемой: каждый раз, когда мне нужно распаковать файл в * nix, я не могу вспомнить все параметры и заканчиваю поиском в Google, что удивительно, учитывая, как часто мне нужно сделай это.
У вас есть хорошая шпаргалка? Или как насчет мнемоники для всех этих неприятных переключателей в tar?
Я делаю эту статью вики, чтобы мы могли создать хороший шпаргалку здесь.
О, и о страницах руководства: есть одна вещь, для которой они не полезны, это для выяснения, как распаковать файл.
16 ответов
Или как насчет использования оболочки с расширенными возможностями завершения (например, zsh или свежей версией bash), которая дополнит ваши параметры всесторонней помощью?:))
Что касается tar: просто посмотрите на клавиатуру "qwerty". Есть буквы "zxcvf" рядом друг с другом. Вам нужны либо "tar czvf file.tar.gz файлы", либо "tar xzvf file.tar.gz".
Обзор опций 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 / *
Есть небольшой скрипт на Perl под названием "unp".
unp filename.tar.gz
... и это все извлекает. Работает с любым сжатым файлом, если у вас есть нужные двоичные файлы. И ты просто забываешь о синтаксисе или любом другом дерьме. Проверьте репозитории вашего дистрибутива Linux. Это должно быть там (по крайней мере, в Arch, Debian и Ubuntu).
Действительно при частом использовании я делаю различие между извлечением (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
}
Если у вас возникли проблемы с запоминанием параметров 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".
Я всегда зачитываю команды в уме, печатая
сжать подробный zip-файл
tar cvzf FILE
извлечь подробный почтовый файл ФАЙЛ
tar xvzf FILE
Три наиболее часто используемые операции:
--create
-c
Создайте новый архив tar.
--list
-t
Список содержимого архива.
--extract
-x
Извлеките одного или нескольких участников из архива.
Пять продвинутых операций с tar:
--append
-r
Добавить новые записи в архив, который уже существует.
--update
-u
Добавьте более поздние копии участников архива в конец архива, если они существуют.
--concatenate
--catenate
-A
Добавьте один или несколько уже существующих архивов в конец другого архива.
--delete
Удалить элементы из архива (не работает на лентах).
--compare
--diff
-d
Сравните участников архива с их аналогами в файловой системе.
Я делаю следующее
Чтобы создать 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 - )
Все, что тебе нужно tar x
(выдержка из стандартного ввода), tar c
(смола на стандартный вывод), gzip -c
(gzip от стандартного ввода к стандартному выводу; -1
в -9
для уровней сжатия; то же самое касается bzip2
) а также gunzip -c
(gunzip от stdin до stdout) - все остальное - это трубы.
Для 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%
90% времени я просто использую
tar -xvf file.*
х: извлечение
v: быть многословным (необязательно)
f: входной файл (tar, gz, bzip2 и т. д.)
Полегче, а?:)
Используйте Fileroller или Ark, если вы не в консоли.
Вы также можете создать псевдоним. просто добавьте эти две строки к вашему ~/.bash_aliases
файл:
alias untar="tar xvf"
alias dotar="tar cvf"
Вы можете использовать untar foo.tar.gz
извлечь и dotar foo.bar
сжать. Вы можете использовать другие псевдонимы, которые легко запомнить.
Создайте Z ip для F ilename
tar -czf myfile.tar.gz myfile.sql
e X tract Z ip с именем пользователя
tar -xzf myfile.tar.gz
Я использую скрипт Perl под названием aunpack
, часть проекта atool, уже много лет. Итак, вы просто запускаете: aunpack foo.{zip/tar.gz/tar.bz2}
и это делает правильную вещь, основанную на расширении файла.
Другое преимущество aunpack
является то, что он не будет загрязнять текущий каталог с большим количеством файлов. Скажем, есть 20 файлов в foo.zip
которые не находятся в подкаталоге. Вместо того, чтобы извергать эти файлы в текущем каталоге, aunpack
создаст foo
подкаталог и положить все файлы там.
Я думаю, что легко думать о том, что вы хотите, а не только некоторые буквы.
Чтобы проиллюстрировать это, я буду использовать пример того, как извлечь file.tar.gz:
Поскольку это tar-файл, вы должны использовать программу tar. Тогда это варианты:
- х, так как вы хотите е тракта.
- z, если файл заканчивается на.gz. (в имени файла указывается gz после tar). Этот параметр архивирует архив.
- f для файла, за которым следует имя архива.
Это продемонстрировано в примере ниже:
tar xzf file.tar.gz
Насколько я помню, это всегда "tar XXvf ", где два X
- х для еХ тракта или с для С reate и,
- либо z = gzip, j = bzip2 (gzip встречается чаще, так что обычно это z, по какой-то причине j = bzip2 просто застрял в моей голове).
Иногда вы сталкиваетесь со сжатыми, но не заархивированными файлами, где добавляете un к любому типу сжатия. например, gun zip или bun zip2.
Если что, я забываю 2, а иногда и "bzip".