> For the complete documentation index, see [llms.txt](https://visman.gitbook.io/os/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://visman.gitbook.io/os/linux/komanda-tar.md).

# Команда tar

Работа с архиватором

#### Создать \*tar.gz архив

```
tar -zcf [имя_файла] [путь_до_папки/файла]
```

**z** - архивирует с gzip компрессией. Если нужно использовать bzip2, надо заменить ключ "z" на "j";

**c** - без этого ключа архив не создастся;

**f** - вывод информация в файл. Без этого ключа tar будет выдавать результат на stdout при упаковке и пытаться читать архив с stdin при распаковке.

**v** - вывод подробной информации

```
tar \
  -cvzf ../var/www/html/site.ru/site-$(date +%Y%m%d).tar.gz \
  -C /var/www/html \
  site
```

#### Исключить папки и файлы при создании архива

```
tar -zcf /root/files.tar.gz /home/ --exclude={'/cache/','/trash/'}
```

{% hint style="info" %}
Символы звёздочек в exclude означают любой набор символов. То есть выполнять эту команду без звёздочек в начале путей, то необходимо прописывать полный путь к папке, которую надо исключить. В конце значений exclude тоже стоят звёздочки, чтобы удалялись не сами папки, а их содержимое (все дочерние файлы и папки). При выполнении такой команды в архив не попадут файлы из папок: /home/cache/ /home/folder/cache/ /home/folder/subfolder/cache/
{% endhint %}

{% hint style="danger" %}
Обратите внимание на то, что внутри фигурных скобок explude нет пробелов {'*/cache/*','*/trash/*'}. Если поставить пробел до/после запятой или до/после фигурной скобки, то исключение не сработает
{% endhint %}

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

```
tar -xf files.tar.gz
```

{% hint style="info" %}
Если требуется распаковать архив в определённую папку, то путь к ней можно указать после ключа C:
{% endhint %}

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

#### Перенос системы

```
sudo tar -cpv --one-file-system / | sudo tar -x -C /mnt
```

{% hint style="info" %}
{% code fullWidth="false" %}

```html
--one-file-system указывает работать в пределах одной файловой системы.
Если имеются примонтированные разделы (например /boot /home /var),
то необходимо проделать данную команду и в данных каталогах.
```

{% endcode %}
{% endhint %}

#### Бэкап системы в файл со сжатием

```
tar -czvf ubuntu22_04_wrk.tar.gz -C / --exclude={'./tmp/*','./proc/*','./sys/*','./run/*','./dev/*','./mnt/*','./snapshots/*','./boot/efi/*','./lost+found','./target'} .
```

{% hint style="info" %}
Ключ "**-С /"** указывает сменить рабочую директорию на корень "/";

В ключе "--exclude={}" указываются шаблоны для исключения из архива, так как в конце в качестве начального каталога указывается ".", то tar воспринимает пути с этого символа. Если необходимо исключить содержимое папки то после названия используется "/\*" при таком написании в архив попадает лишь пустая папка. Если же требуется исключить папку вообще, то шаблон должен оканчиваться ее именем,  никакие символы после стоять не должны;
{% endhint %}

{% hint style="warning" %}
Желательно прописывать абсолютные пути, чтобы имя шаблона не совпало где-либо еще.
{% endhint %}
