Команда cpio

Команда cpio позволяет использовать утилиту для архивации данных с соответствующим именем. Эта утилита поддерживает как собственный бинарный формат архивов CPIO, так и популярный формат архивов TAR. Она достаточно редко используется, в отличие от утилиты tar, позволяющей работать лишь с архивами собственного формата. При этом следует отметить, что архивы формата CPIO в текущее время используются для хранения файлов в пакетах программного обеспечения формата RPM, а также файлов начальной файловой системы Linux (initrd). В случае пакета формата RPM архив формата CPIO с файлами программного компонента может быть извлечен с помощью специальной утилиты rpm2cpio.

Базовый синтаксис команды выглядит следующим образом:

$ cpio [параметры]

Для создания архива должен использоваться параметр -o, на вход утилиты должны подаваться имена добавляемых файлов, а стандартный поток вывода утилиты должен быть перенаправлен в файл архива. Вместо перенаправления стандартного потока вывода в файл архива может использоваться параметр -F с значением, являющимся именем файла архива. В качестве источника списка файлов для добавления в архив могут выступать такие стандартные утилиты, как ls и find (примеры будут приведены ниже).

Для извлечения файлов из архива предназначен параметр -i, причем на вход утилиты должны передаваться данные из файла архива. Извлеченные файлы будут сохраняться в текущей директории.

Если вас интересует, какой файл обрабатывается в данный момент, вы можете добавить к используемым параметрам параметр -v.

При возникновении необходимости работы с файлами формата TAR должен использоваться параметр -H с значением tar. Утилита cpio не поддерживает модификацию PAX формата TAR, поэтому не рекомендуется для работы с архивами формата TAR.

Примеры использования

Извлечение файлов из архива формата CPIO в текущую директорию

$ cpio -i < archive.cpio

Создание архива формата CPIO с перенаправлением стандартного потока вывода

$ ls | cpio -o > archive.cpio

Создание архива формата CPIO с указанием имени файла архива

$ ls | cpio -o -F archive.cpio

Копирование скрытых файлов из текущей директории

Для копирования всех скрытых файлов из текущей директории в директорию /tmp может использоваться следующая команда:

$ find .* | cpio -pmud /tmp

В данном случае команда find предназначена для формирования списка временных файлов, который отправляется на вход утилиты cpio. Если вы не хотите копировать какие-либо файлы, вы можете создать фильтр на основе утилиты grep. Параметр -p предназначен для копирования файлов, параметр -m — для сохранения меток времени их модификации, а параметр -d — для воссоздания дерева директорий при необходимости.