Linux tar запаковать/распаковать

Tar — один из наиболее распространённых архиваторов в Linux системах. Но tar не сжимает файлы в архиве. Tar всего лишь упаковывает файлы в архив без компрессии. Для сжатия tar умеет работать в паре с bzip2 или gzip. В статье приведено описание способов применения tar.

Создать архив из папки

Чтобы создать архив tar с gzip сжатием, введите следующую команду:

tar —zcf /root/files.tar.gz /home/folder/

Разберём пример по частям. Команда tar запускается с ключами:

z — Архивирует с gzip компрессией. Чтобы использовать bzip2, надо заменить ключ «z» на «j«.

c — Создаёт архив. Без этого ключа архив не создастся.

f — Без этого ключа архив не создастся. Как гласит документация: «без ключа f tar будет выдавать результат на stdout при упаковке и пытаться читать архив с stdin при распаковке»

После ключей указывается путь к файлу создаваемого архива с его названием: /root/files.tar.gz. Если указать относительный путь, то файл создастся в той папке, где открыт терминал.

В самом конце команды передаётся директория, которую надо архивировать /home/folder/. В примере стоит абсолютный путь к этой папке. В таком случае в архиве tar будет находится все родительские папки т.е. при открытии архива там будет папка /home/ и внутри неё папка /folder/. Но если абсолютный путь заменить относительным, то будет только /folder/.

Разархивировать

Чтобы распаковать архив, перейдите в папку с ним и введите:

tar —xf files.tar.gz

Файлы будут распакованы в ту же папку, где находится архив.

Ключ x указывает на распаковку архива. Ключ f обязателен, как и при создании архива.

Если требуется распакавать архив в определённую папку, то путь к ней можно указать после ключа C:

tar —xf files.tar.gz -C /home/folder/

Исключить папки из архива

Иногда возникает задача в исключении некоторых подпапок из архива. К примеру, если надо создать архив из папки /home/, но в него не должны попасть содержания папок /cache/ и /trash/. Тогда необходимо использовать ключ exclude:

tar -zcf /root/files.tar.gz /home/ —exclude={‘*/cache/*’,’*/trash/*’}

В конце значений explude, у папок, нет слеша «/». Если слеша не будет, то удалится не содержимое папки, а вся папка.

Звёздочки в названии папок стоят, чтобы не указывать полный путь к папкам. При выполнении такой команды в архив не попадут файлы из папок:

  • /home/cache/
  • /home/folder/cache/
  • /home/folder/subfolder/cache/

Если задать exclude без звёздочек, то необходимо прописывать полный путь к папке, которую надо исключить.

Обратите внимание на то, что в записи {‘*/cache/*’,’*/trash/*’} нет пробелов! Если поставить пробел до/после запятой или до/после фигурной скобки, то исключение не сработает. Т.е. команда с {‘*/cache/*’, ‘*/trash/*’} не даст желаемого результата из-за пробела после запятой.



2017-07-30T13:57:47
Программирование