Linux. Команда tar

19.06.2023

Теги: CLILinuxДиректорияКомандаФайл

По умолчанию в ОС Linux включен встроенный архиватор tar, позволяющий запаковывать/распаковывать архив и выполнять много других операций с архивами. В его функционал не входит компрессия, но он отлично работает с утилитами сжатия gzip, bzip2 и xz.

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

$ tar опции архив файл(ы)

Существует три основных действия, которые можно сделать с архивом — создать (опция -c), распаковать (опция -x) и просмотреть список файлов (опция -t). Архиватор не сжимает файлы, но позволяет использовать gzip (опция -z), bzip2 (опция -j) и xz (опция -J).

Опция -f задает имя файла архива, опция -v устанавливает verbose режим. Опция -u позволяет обновить файлы в архиве (по времени модификации). Опция -p восстанавливает права файлов при извлечении из архива.

Создание архива

Создать новый архив без сжатия и добавить в него один файл

$ tar cvf archive.tar readme.txt
readme.txt

Создать новый архив без сжатия и добавить в него директорию

$ rm archive.tar
$ tar cvf archive.tar data/
data/
data/data.txt
data/xml/
data/xml/one.xml
data/xml/two.xml
data/csv/
data/csv/one.csv
data/csv/two.csv

Содержимое архива

Посмотреть содержимое архива, который создали только что

$ tar tf archive.tar
data/
data/data.txt
data/xml/
data/xml/one.xml
data/xml/two.xml
data/csv/
data/csv/one.csv
data/csv/two.csv

Распаковка архива

Извлечь содержимое архива, который создали только что

$ mv data/ data-source/
$ tar xvf archive.tar
data/
data/data.txt
data/xml/
data/xml/one.xml
data/xml/two.xml
data/csv/
data/csv/one.csv
data/csv/two.csv

Обратите внимание, что tar сохраняет пути к файлам в архиве и распаковывает с учетом этих путей в текущую директорию. Поэтому мы изменили имя исходной директории data на data-source. При извлечении файлов их архива — tar создал директорию data в текущей директории и вложенные директории data/xml и data/csv.

Распаковка в директорию

С помощью опции -C можно указать директорию, куда нужно распаковать архив — но директорию нужно создать заранее

$ mkdir extract
$ tar -C extract/ -xvf archive.tar
data/
data/data.txt
data/xml/
data/xml/one.xml
data/xml/two.xml
data/csv/
data/csv/one.csv
data/csv/two.csv

Распаковка без вложенности

Внутри директории extract теперь есть директория data. Иногда это может быть неудобно и хотелось бы распаковать без вложенной директории — за это отвечает опция --strip-components.

$ rm -rf extract/*
$ tar -C extract/ -xvf archive.tar --strip-components=1
data/data.txt
data/xml/
data/xml/one.xml
data/xml/two.xml
data/csv/
data/csv/one.csv
data/csv/two.csv

Теперь директория extract содержит файл data.txt и директории xml и scv — нет вложенной директории data.

Частичное извлечение

Извлечь из архива archive.tar файл data/xml/one.xml в директорию extract без вложенности

$ rm -rf extract/*
$ tar -C extract/ -xvf archive.tar --strip-components=2 data/xml/one.xml
data/xml/one.xml

Извлечь из архива archive.tar файлы data/xml/one.xml и data/csv/one.csv в директорию extract без вложенности

$ rm -rf extract/*
$ tar -C extract/ -xvf archive.tar --strip-components=2 data/xml/one.xml data/csv/one.csv
data/xml/one.xml
data/csv/one.csv

Извлечь из архива archive.tar директорию data/csv в директорию extract без вложенности

$ rm -rf extract/*
$ tar -C extract/ -xvf archive.tar --strip-components=2 data/csv
data/csv/one.csv
data/csv/two.csv
$ ls -la extract/
итого 16
drwxrwxr-x  2 evgeniy evgeniy 4096 июн 19 14:25 .
drwxr-x--- 27 evgeniy evgeniy 4096 июн 19 14:21 ..
-rw-rw-r--  1 evgeniy evgeniy   33 июн 19 12:22 one.csv
-rw-rw-r--  1 evgeniy evgeniy   33 июн 19 12:24 two.csv

Извлечь из архива archive.tar директории data/csv и data/xml в директорию extract без вложенности

$ rm -rf extract/*
$ tar -C extract/ -xvf archive.tar --strip-components=2 data/csv data/xml
data/xml/one.xml
data/xml/two.xml
data/csv/one.csv
data/csv/two.csv
$ ls -la extract/
итого 24
drwxrwxr-x  2 evgeniy evgeniy 4096 июн 19 16:27 .
drwxr-x--- 27 evgeniy evgeniy 4096 июн 19 16:24 ..
-rw-rw-r--  1 evgeniy evgeniy   33 июн 19 12:22 one.csv
-rw-rw-r--  1 evgeniy evgeniy   33 июн 19 12:25 one.xml
-rw-rw-r--  1 evgeniy evgeniy   33 июн 19 12:24 two.csv
-rw-rw-r--  1 evgeniy evgeniy   33 июн 19 12:25 two.xml

Исключение по маске

При создании архива, с помощью опции --exclude, часть файлов или директорий можно пропустить.

$ rm archive.tar 
$ tar --exclude='*.xml' -cvf archive.tar data/ # пропускаем все xml-файлы
data/
data/data.txt
data/xml/
data/csv/
data/csv/one.csv
data/csv/two.csv
$ rm archive.tar 
$ tar --exclude='data/csv' -cvf archive.tar data/ # пропускаем директорию data/csv
data/
data/data.txt
data/xml/
data/xml/one.xml
data/xml/two.xml

Добавление в архив

После создания архива можно добавлять в него файлы и директории с помощью опции -r или --append

$ rm archive.tar 
$ tar cvf archive.tar data/data.txt # создаем архив
data/data.txt
$ tar rvf archive.tar data/csv # добавляем директорию
data/csv/
data/csv/one.csv
data/csv/two.csv
$ tar rvf archive.tar data/xml # добавляем директорию
data/xml/
data/xml/one.xml
data/xml/two.xml
$ tar -tf archive.tar # список файлов в архиве
data/data.txt
data/csv/
data/csv/one.csv
data/csv/two.csv
data/xml/
data/xml/one.xml
data/xml/two.xml

Удаление из архива

Файлы и директории можно не только добавлять в архив, но и удалять из архива

$ tar tf archive.tar # список файлов в архиве
data/data.txt
data/csv/
data/csv/one.csv
data/csv/two.csv
data/xml/
data/xml/one.xml
data/xml/two.xml
$ tar f archive.tar --delete data/xml/one.xml # удаляем файл
$ tar tf archive.tar # список файлов в архиве
data/data.txt
data/csv/
data/csv/one.csv
data/csv/two.csv
data/xml/
data/xml/two.xml
$ tar f archive.tar --delete data/csv # удаляем директорию
$ tar tf archive.tar # список файлов в архиве
data/data.txt
data/xml/
data/xml/two.xml

Сжатие архива

Тут все просто — добавляется всего одна опция как при добавлении в архив, так и при извлечении из архива

$ tar cvzf archive.tar.gz data/ # создание сжатого архива, gzip
data/
data/data.txt
data/xml/
data/xml/one.xml
data/xml/two.xml
data/csv/
data/csv/one.csv
data/csv/two.csv
$ rm -rf extract/*
$ tar -C extract/ -xvzf archive.tar.gz # распаковка сжатого архива, gunzip
data/
data/data.txt
data/xml/
data/xml/one.xml
data/xml/two.xml
data/csv/
data/csv/one.csv
data/csv/two.csv
$ tar cvjf archive.tar.bz data/ # создание сжатого архива, bzip2
data/
data/data.txt
data/xml/
data/xml/one.xml
data/xml/two.xml
data/csv/
data/csv/one.csv
data/csv/two.csv
$ tar -C extract/ -xvjf archive.tar.bz # распаковка сжатого архива, bunzip2
data/
data/data.txt
data/xml/
data/xml/one.xml
data/xml/two.xml
data/csv/
data/csv/one.csv
data/csv/two.csv

Поиск: CLI • Linux • Директория • Команда • Файл • tar

Каталог оборудования
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Производители
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Функциональные группы
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.