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/*’} не даст желаемого результата из-за пробела после запятой.