Как распаковать несколько архивов одновременно linux

Обновлено: 05.07.2024

Краткая памятка по работе с архиваторами (программами управления файловыми архивами) из консоли в Linux.

    В двух словах о самом формате tar

Например чтобы запаковать текущую папку в tar-архив напишем

где foo.tar имя которое будет присвоено полученному архиву, а "./" указание папки

А для распаковки этого архива будем использовать

-A, --catenate, --concatenate
склеить файлы tar в один архив

-c, --create
создать новый архив

-d, --diff, --compare
найти различия между архивом и файловой системой

--delete
удалить из архива (не применяется к магнитным лентам!)

-r, --append
добавить файлы в конец архива

-t, --list
показать содержимое архива

-u, --update
добавить только новые версии файлов файлов

-x, --extract, --get
извлечь файлы из архива

-j, --bzip2
используется для создания/распаковки .bz2 файлов

-z, --gzip, --ungzip
используется для создания/распаковки .gz файлов

-M, --multi-volume
создать/показать/распаковать многотомный архив

Другие не менее интересные опции этой очень важной команды можно найти в руководстве пользователя - man tar.

(«-» после -czvf говорит tar'у выводить в stdout, чтобы потом split мог его разбить на части(а «-» в split говорит ему брать из stdin)) В результате будут созданы файлы backup.tar.gzaa, backup.tar.gzab, backup.tar.gzac . размер каждого 1024 Мб. Именно последние две буквы в названии архива .tar.gzaa, .tar.gzab и т.д., указывают на то, что он разбит на части.

Склеить все части можно командой

Если все части архива находятся в одной папке, то команда для склеивания выглядит так:

в результате будут созданы файлы arch.7z.001 arch.7z.002 arch.7z.003 . размер каждого 100 Мб (опция -v100m).

Чтобы распаковать многотомный архив arch.7z.001, достаточно поместить все части архива в текущую папку и дать команду

между вашим паролем и ключем -p не должно быть пробелов, в кавычки надо брать если в пароле используется например дефис или другой системный символ

Распаковать множество архивов *.tar.gz (В папке больше 30 архивов. как все одним махом распаковать?)

Распаковать множество архивов *.tar.gz

Скачал из инета кучу архивов. все лежат в одной папке. Надо распаковать все архивы одним махом в эту же папку, так чтобы: были архивы 1. 2. . 30 а стали архивы 1. 2. . 30 вместе с распакованными архивами разложенными по соответствующим папкам: папки: 1. 2. . 30.

Через графическую болочку такого сделать не получается, максимум что получается это распаковать два архива одним махом. Наверняка моя проблема решаема. Прошу подсказать.
Система SUSE11.2 КДЕ4,3,1

ls | while read i; do mkdir $; tar xzf $i -C $; mv $i $; done
как-то так
ls | while read i; do mkdir $; tar xzf $i -C $; mv $i $; done
как-то так

много буков - пугает малость. Это набор команд? Команда? Что то обобщенное но не совсем понятное. скорее всего правильнее будет man tar. :-(

"Настоящие мужчины используют поиск" ©Goodvin

много буков - пугает малость. Это набор команд? Команда? Что то обобщенное но не совсем понятное.

"многабукафф ниасилил"
жесть.

чтобы посмотреть что происходит на самом деле, вы можете пред каждой командой в цикле поставить echo:


(потом, если команды делают то что требуется, и в именах архивов нет пробелов, просто можно сделать pipe в shell:
Собственно, именно это я и имел в виду во всех случаях, кроме последнего :)

"Настоящие мужчины используют поиск" ©Goodvin

много буков - пугает малость. Это набор команд? Команда? Что то обобщенное но не совсем понятное.

Придираешся к Русскому языку в моем исполнении. Нет чтобы по делу написать что нибудь. а про то что много буковок, ну так как было так и написал.

Остальным спасибо за разъяснения!

делает практически почти так как нужно. Было в папке: "архив.tar.gz"
Стало в папке "папка "архив"" а в папке "папка "архив"" лежит сам "архив.tar.gz" простите за каламбур. а надо чтобы стало так:
НАДО: в папке: файл: "архив.tar.gz" и папка: "папка "архив"".

Хотя и тот вариант что вы мне уже разжевали тоже очень даже не плох! И самое главное выполняется на кучу порядков быстрее чем если все ручками разархивировать по одному/два через графический интерфейс! Еще рас спасибо! И. может это в общий FAQ? Я так понимаю универсальная для всех Линуксов команда.

В этой статье основное внимание я уделю консольным средствам Linux для работы с различными типами архивов, а в следующих статьях постараюсь описать графические программы для работы с архивами. Это сделано по нескольким причинам:
1) В графических программах не сложно разобраться самому
2) Эта статья написана в первую очередь для администраторов или тех, у кого нет возможности (или желания?) по каким-то причинам установить ПО с GUI.
3) Не знаю как вам, а мне приятно осознавать, что для выполнения самых трудных операций над файлами не обязательно прибегать к установке дополнительных тяжелых программных средств, достаточно лишь поближе познакомиться с теми маленькими, но очень мощными программками, которые присутствуют в наших дистрибутивах уже очень много лет :)

УТИЛИТА TAR

Tar - стандартное и самое популярное средство для архивирования/распаковки данных в Linux. Я опишу основные опции tar.

Добавить файлы в существующий архив.
Добавление файлов в сжатый архив невозможно. Вы можете добавлять файлы только в несжатый архив. Поясню на примере: создаем несжатый архив добавляем в него файлы удаляем несжатый архив, создаем сжатый и пытаемся добавить в него файлы
На самом деле вы, конечно, можете "обновить" сжатый архив, добавив в него файлы. Но программы, которые это делают, всего-лишь распаковывают существующий архив и создают новый с учетом файлов, которые надо добавить. Следует понимать, что между архивированием и сжатием файлов есть большая разница. К примеру, вы можете создать несжатый архив из многих файлов командой tar cf archive.tar documents/ , если надо быстро передать это кому-то как единый файл. Но на современных компьютерах можно не экономить и сжимать файл самым быстрым способом. Например, насколько мне известно, gzip сжимает/разжимает быстрее всего.

Просмотреть список файлов в архиве.
Чтобы просмотреть список файлов в архиве, используйте опцию t.
Несколько простых примеров работы с архивами в GNU/Linux
Имеется несколько файлов, находящихся в одном каталоге, над которыми мы будем работать:

Создать архив из одного файла, сжатый GZIP Создать архив из двух файлов, сжатый BZIP2 Архивировать каталог documents вместе со всем его содержимым как GZIP архив Распаковать в текущий каталог архив GZIP Распаковать в текущий каталог архив BZIP2 Распаковать архив GZIP в каталог documents/new/

Создание бэкапа системы в Linux.
Я не хочу останавливаться на этом моменте, т.к. это тема отдельной статьи. Скажу лишь, что при архивировании всей системы ( / ) нужно учитывать точки монтирования файловых систем и такие виртуальные файловые системы как /proc и /dev . Также вам пригодится опция —ignore-failed-read , с ней tar не будет останавливаться в случае если встретит файл, который он не может прочитать. Опция --one-file-system тоже может быть полезна — она указывает Tar-у, чтобы он не выходил за пределы одной файловой системы. Это нужно, если вы архивируете корень, когда надо пропусить /proc и /dev . Создайте текстовый файл, в котором перечислите список того, что архивировать НЕ надо. Это могут быть каталоги tmp, файлы логов и даже сам файл с бэкапом. Имя файла допишите как аргумент к опции —exclude-from. Например, так —exclude-from=list.txt . По поводу выбора «сжимальщика» - gzip использовать вольготнее чем bzip2, т.к. Сжимает он намного быстрее (до 80%), проигрывая в размере архива примерно на 10-20%.


Создание множества архивов.
К примеру, есть такой список файлов Нам надо сделать из этого 1.tar.gz 2.tar.gz 3.tar.gz и т.д.
Для этого можно воспользоваться конструкцией for i in список; do команда; done . Например, так: В этом случае имена получившихся будут иметь такой вид имя-файла.tar.gz, т.е. 1.djvu.tar.gz .Нет ничего страшного в том, что в имени архива есть «расширение» того файла, который в архиве лежит, т.к. В Linux изначально нет никаких «расширений» и, проще говоря, .tar.gz — всего-лишь часть имени файла. А тип файла частенько правильнее узнать утилитой file .

Но у этого способа есть и минусы. Например, у вас не получится обработать таким способом файлы, которые содержат пробелы в своем имени. На этот случай можно использовать другой, более практичный способ заархивировать много файлов: Он будет работать даже если в именах файлов содержатся пробелы и спецсимволы. Не забудьте про опцию -type f утилиты find. Чтобы понять, зачем она нужна, выполните этот же скрипт без нее и затем выполните команду ls -a =)


Массовое переименование файлов в Linux
А вообще, старайтесь не использовать пробелы в именах файлов. Следующая конструкция переименовывает все файлы в текущем каталоге, заменяя пробелы на символы подчеркивания «_»: Пример использования массового переименования файлов с заменой пробелов на символы подчеркивания: Приведенная конструкция заменит пробелы на символы подчеркивания в именах файлов не только текущего но и всех вложенных каталогов. Если вам нужно переименовать файлы только в текущем каталоге, добавьте опцию -maxdepth 1 :

Gzip также относится к .gz файлов .gz и утилите gzip которая используется для сжатия и распаковки файлов.

В этом руководстве мы покажем вам, как использовать команду gzip .

Синтаксис команды gzip

Общий синтаксис команды gzip следующий:

Gzip сжимает только отдельные файлы и создает сжатый файл для каждого заданного файла. По соглашению, имя файла, сжатого с помощью Gzip, должно заканчиваться на .gz или .z .

Если вы хотите сжать несколько файлов или каталогов в один файл, сначала вам нужно создать архив Tar, а затем сжать файл .tar с помощью Gzip. Файл с .tar.gz или .tgz представляет собой архив Tar, сжатый с помощью Gzip.

Gzip чаще всего используется для сжатия текстовых файлов, архивов Tar и веб-страниц. Не используйте Gzip для сжатия изображений, аудио, документов PDF и других двоичных файлов, поскольку они уже сжаты.

gzip может сжимать только обычные файлы. Символьные ссылки игнорируются.

Сжатие файлов с помощью gzip

Чтобы сжать отдельный файл, вызовите команду gzip за которой следует имя файла:

gzip создаст файл filename.gz и удалит исходный файл.

По умолчанию gzip сохраняет в сжатом файле метку времени, режим, владельца и имя исходного файла.

Сохраните исходный файл

Если вы хотите сохранить исходный (исходный) файл, используйте параметр -k :

Подробный вывод

Используйте параметр -v если вы хотите увидеть процентное сокращение и имена обрабатываемых файлов:

Сжать несколько файлов

Вы также можете передать несколько файлов в качестве аргументов команде. Например, чтобы сжать файлы с именами file1 , file2 , file3 , вы должны выполнить следующую команду:

Приведенная выше команда создаст три сжатых файла: file1.gz , file2.gz , file3.gz .

Сжать все файлы в каталоге

Чтобы сжать все файлы в данном каталоге, используйте параметр -r :

gzip будет рекурсивно проходить по всей структуре каталогов и сжимать все файлы в каталоге и его подкаталогах.

Измените уровень сжатия

gzip позволяет указать диапазон уровней сжатия от 1 до 9. -1 или --fast означает самую высокую скорость сжатия с минимальной степенью сжатия, -9 или --best указывает на самую --best скорость сжатия с максимальной степенью сжатия. Уровень сжатия по умолчанию -6 .

Например, чтобы получить максимальное сжатие, вы должны запустить:

Стандартный ввод

Чтобы создать файл .gz из стандартного .gz , перенаправьте вывод команды в gzip . Например, чтобы создать резервную копию базы данных MySQL в формате Gzip, вы должны выполнить:

Вывод команды mysqldump будет вводиться для gzip .

Распаковка файлов с помощью gzip

Чтобы распаковать файл .gz , используйте параметр -d :

Возможно, вам будет проще запомнить gunzip чем gzip -d .

Сохраните сжатый файл

Как и при сжатии файла, параметр -k сообщает gzip нужно сохранить входной файл, в данном случае это сжатый файл:

Распаковать несколько файлов

Чтобы распаковать сразу несколько файлов, передайте имена файлов в gzip качестве аргументов:

Распаковать все файлы в каталоге

При использовании с параметрами -d и -r gzip рекурсивно распаковывает все файлы в указанном каталоге:

Список содержимого сжатого файла

При использовании с параметром -l gzip показывает статистику по данным сжатым файлам:

Вывод будет включать имя несжатого файла, сжатый и несжатый размер и степень сжатия:

Чтобы получить дополнительную информацию, добавьте параметр -v :

Выводы

С помощью Gzip вы можете уменьшить размер данного файла. Команда gzip позволяет сжимать и распаковывать файлы.

Для получения дополнительной информации о команде gzip обратитесь к странице документации Gnu gzip .

Читайте также: