Работа с архивами в OSx в командной строке
Упаковка и распаковка архивов различных форматов
Этот материал мы хотели бы посвятить созданию архивов популярных и не очень форматов, а также извлечению из них файлов. Давайте сразу к делу.
Терминал по умолчанию поддерживает следующие популярные форматы: zip, gzip, bzip, tar и 7z.
Если не вдаваться в тонкости, то можно моментально выдать читателям две команды: compress и uncompress. Первая упаковывает, а вторая распаковывает файлы, вот только на выходе мы получает стандартный Unix-овский формат сжатия Lempel Ziv и суффикс Z там, где привыкли видеть более обыденные расширения. Поэтому разумнее использовать описанные выше архиваторы (файл «index.txt» был выбран в качестве примера и может быть заменён на что угодно).
Zip
Zip — пожалуй, самый распространённый формат, поэтому рассмотрим его первым. Zip, кстати, единственный, кто не удаляет оригинальные файлы/архивы и работает с несколькими файлами.
Для упаковки одного файла:
<blockquote "="" "";="" color:="" rgb(85,="" 85,="" 85);="" line-height:="" 1.3;="" position:="" relative;="" width:="" 678.375px;"="" style="box-sizing: inherit; padding: 0.9375rem 1.25rem; margin: 0px auto 2rem; font-size: 1.5rem; border-width: 0px 0px 0px 6px; border-left-color: rgb(255, 116, 0); border-top-style: initial; border-right-style: initial; border-bottom-style: initial; border-top-color: initial; border-right-color: initial; border-bottom-color: initial; border-image: initial; font-family: Golos, sans-serif; outline: 0px; vertical-align: baseline;">
zip index.zip index.txt
Для упаковки нескольких файлов:
<blockquote "="" "";="" color:="" rgb(85,="" 85,="" 85);="" line-height:="" 1.3;="" position:="" relative;="" width:="" 678.375px;"="" style="box-sizing: inherit; padding: 0.9375rem 1.25rem; margin: 0px auto 2rem; font-size: 1.5rem; border-width: 0px 0px 0px 6px; border-left-color: rgb(255, 116, 0); border-top-style: initial; border-right-style: initial; border-bottom-style: initial; border-top-color: initial; border-right-color: initial; border-bottom-color: initial; border-image: initial; font-family: Golos, sans-serif; outline: 0px; vertical-align: baseline;">
zip index.zip index1.txt index2.txt index3.txt
Распаковка:
<blockquote "="" "";="" color:="" rgb(85,="" 85,="" 85);="" line-height:="" 1.3;="" position:="" relative;="" width:="" 678.375px;"="" style="box-sizing: inherit; padding: 0.9375rem 1.25rem; margin: 0px auto 2rem; font-size: 1.5rem; border-width: 0px 0px 0px 6px; border-left-color: rgb(255, 116, 0); border-top-style: initial; border-right-style: initial; border-bottom-style: initial; border-top-color: initial; border-right-color: initial; border-bottom-color: initial; border-image: initial; font-family: Golos, sans-serif; outline: 0px; vertical-align: baseline;">
unzip index.zip
GNU Zip
Упаковка GNU Zip (оригинальный файл удаляется, создаётся архив с суффикcом .gz):
<blockquote "="" "";="" color:="" rgb(85,="" 85,="" 85);="" line-height:="" 1.3;="" position:="" relative;="" width:="" 678.375px;"="" style="box-sizing: inherit; padding: 0.9375rem 1.25rem; margin: 0px auto 2rem; font-size: 1.5rem; border-width: 0px 0px 0px 6px; border-left-color: rgb(255, 116, 0); border-top-style: initial; border-right-style: initial; border-bottom-style: initial; border-top-color: initial; border-right-color: initial; border-bottom-color: initial; border-image: initial; font-family: Golos, sans-serif; outline: 0px; vertical-align: baseline;">
gzip index.txt
Распаковка (здесь удаляется уже распакованный архив):
<blockquote "="" "";="" color:="" rgb(85,="" 85,="" 85);="" line-height:="" 1.3;="" position:="" relative;="" width:="" 678.375px;"="" style="box-sizing: inherit; padding: 0.9375rem 1.25rem; margin: 0px auto 2rem; font-size: 1.5rem; border-width: 0px 0px 0px 6px; border-left-color: rgb(255, 116, 0); border-top-style: initial; border-right-style: initial; border-bottom-style: initial; border-top-color: initial; border-right-color: initial; border-bottom-color: initial; border-image: initial; font-family: Golos, sans-serif; outline: 0px; vertical-align: baseline;">
gunzip index.gz
BZip
Упаковка BZip аналогична (оригинальный файл удаляется, создаётся архив с суффикcом .bz2):
<blockquote "="" "";="" color:="" rgb(85,="" 85,="" 85);="" line-height:="" 1.3;="" position:="" relative;="" width:="" 678.375px;"="" style="box-sizing: inherit; padding: 0.9375rem 1.25rem; margin: 0px auto 2rem; font-size: 1.5rem; border-width: 0px 0px 0px 6px; border-left-color: rgb(255, 116, 0); border-top-style: initial; border-right-style: initial; border-bottom-style: initial; border-top-color: initial; border-right-color: initial; border-bottom-color: initial; border-image: initial; font-family: Golos, sans-serif; outline: 0px; vertical-align: baseline;">
bzip2 index.txt
Распаковка BZip (здесь удаляется уже распакованный архив):
<blockquote "="" "";="" color:="" rgb(85,="" 85,="" 85);="" line-height:="" 1.3;="" position:="" relative;="" width:="" 678.375px;"="" style="box-sizing: inherit; padding: 0.9375rem 1.25rem; margin: 0px auto 2rem; font-size: 1.5rem; border-width: 0px 0px 0px 6px; border-left-color: rgb(255, 116, 0); border-top-style: initial; border-right-style: initial; border-bottom-style: initial; border-top-color: initial; border-right-color: initial; border-bottom-color: initial; border-image: initial; font-family: Golos, sans-serif; outline: 0px; vertical-align: baseline;">
bunzip2 index.bz2
Tar
Остался tar. Tar предназначен для архивации не только файлов, но и целых директорий, чтобы потом, например, сохранить их в качестве бэкапа или отправить по почте. Этот метод благополучно работает с GNU Zip, BZip и Zip. Родное расширение .TAR обычно не используется и в ход идёт тройка тех самых архиваторов. Команда для упаковки (GNU Zip):
<blockquote "="" "";="" color:="" rgb(85,="" 85,="" 85);="" line-height:="" 1.3;="" position:="" relative;="" width:="" 678.375px;"="" style="box-sizing: inherit; padding: 0.9375rem 1.25rem; margin: 0px auto 2rem; font-size: 1.5rem; border-width: 0px 0px 0px 6px; border-left-color: rgb(255, 116, 0); border-top-style: initial; border-right-style: initial; border-bottom-style: initial; border-top-color: initial; border-right-color: initial; border-bottom-color: initial; border-image: initial; font-family: Golos, sans-serif; outline: 0px; vertical-align: baseline;">
tar -czvf Hello.tar.gz /Users/Wandarnem/Desktop/ololo
После нажатия «Enter» папка, находящаяся по адресу «/Users/Wandarnem/Desktop/ololo» сожмётся в архив «Hello.tar.gz». «-czvf» — дежурная комбинация, служащая для вывода дополнительных атрибутов команды. Она будет меняться в зависимости от типа выбранного архиватора:
- GNU Zip — «-czvf«
- BZip — «-cjvf«
- Zip — «-cZvf«
Само собой, суффикс «.gz» сменится на «.bz2» и «.Z» соответственно.
Для распаковки воспользуйтесь соответствующими командами (для GNU Zip, BZip и Zip соответственно):
<blockquote "="" "";="" color:="" rgb(85,="" 85,="" 85);="" line-height:="" 1.3;="" position:="" relative;="" width:="" 678.375px;"="" style="box-sizing: inherit; padding: 0.9375rem 1.25rem; margin: 0px auto 2rem; font-size: 1.5rem; border-width: 0px 0px 0px 6px; border-left-color: rgb(255, 116, 0); border-top-style: initial; border-right-style: initial; border-bottom-style: initial; border-top-color: initial; border-right-color: initial; border-bottom-color: initial; border-image: initial; font-family: Golos, sans-serif; outline: 0px; vertical-align: baseline;">
tar -xzvf Hello.tar.gz
tar -xfvf Hello.tar.bz2
tar -xZvf Hello.tar.Z
А ещё возьмите на заметку полезнейшую фишку tar’а по упаковке файлов определённого формата в конкретной директории. Например, если вам нужно сжать только изображения расширения .JPG, введите следующее:
<blockquote "="" "";="" color:="" rgb(85,="" 85,="" 85);="" line-height:="" 1.3;="" position:="" relative;="" width:="" 678.375px;"="" style="box-sizing: inherit; padding: 0.9375rem 1.25rem; margin: 0px auto 2rem; font-size: 1.5rem; border-width: 0px 0px 0px 6px; border-left-color: rgb(255, 116, 0); border-top-style: initial; border-right-style: initial; border-bottom-style: initial; border-top-color: initial; border-right-color: initial; border-bottom-color: initial; border-image: initial; font-family: Golos, sans-serif; outline: 0px; vertical-align: baseline;">
tar -czvf Images.tar.gz /Users/Wandarnem/Desktop/ololo/*.jpg
Выборки для других форматов делаются аналогичным образом. Имя архива «Images.tar.gz», как вы уже догадались, ставится произвольно.
7z
7z — изначально системой не поддерживается. Для его использования требуется предустановки данного архиватора.
Устанавливаем его:
brew install p7zip
Для упаковки одного файла:
<blockquote "="" "";="" color:="" rgb(85,="" 85,="" 85);="" line-height:="" 1.3;="" position:="" relative;="" width:="" 678.375px;"="" style="box-sizing: inherit; padding: 0.9375rem 1.25rem; margin: 0px auto 2rem; font-size: 1.5rem; border-width: 0px 0px 0px 6px; border-left-color: rgb(255, 116, 0); border-top-style: initial; border-right-style: initial; border-bottom-style: initial; border-top-color: initial; border-right-color: initial; border-bottom-color: initial; border-image: initial; font-family: Golos, sans-serif; outline: 0px; vertical-align: baseline;">
7za a -t7z index.7z index.txt
Для упаковки нескольких файлов:
<blockquote "="" "";="" color:="" rgb(85,="" 85,="" 85);="" line-height:="" 1.3;="" position:="" relative;="" width:="" 678.375px;"="" style="box-sizing: inherit; padding: 0.9375rem 1.25rem; margin: 0px auto 2rem; font-size: 1.5rem; border-width: 0px 0px 0px 6px; border-left-color: rgb(255, 116, 0); border-top-style: initial; border-right-style: initial; border-bottom-style: initial; border-top-color: initial; border-right-color: initial; border-bottom-color: initial; border-image: initial; font-family: Golos, sans-serif; outline: 0px; vertical-align: baseline;">
7za a -t7z index.7z *.txt
Распаковка:
<blockquote "="" "";="" color:="" rgb(85,="" 85,="" 85);="" line-height:="" 1.3;="" position:="" relative;="" width:="" 678.375px;"="" style="box-sizing: inherit; padding: 0.9375rem 1.25rem; margin: 0px auto 2rem; font-size: 1.5rem; border-width: 0px 0px 0px 6px; border-left-color: rgb(255, 116, 0); border-top-style: initial; border-right-style: initial; border-bottom-style: initial; border-top-color: initial; border-right-color: initial; border-bottom-color: initial; border-image: initial; font-family: Golos, sans-serif; outline: 0px; vertical-align: baseline;">
7za x index.7z