cpio
– утулита для управления архивами а так же расширение файлов архивов.
Аббревиатура cpio
расшифровывается как “copy in, copy out“.
cpio
используется для трех основных задач:
- копирование файлов в архив (
-o
– copy-out mode); - извлечение данных из архива (
-i
– copy-in mode); - передача файлов в другое дерево каталогов (
-p
– copy-pass mode).
Во время создания архива cpio
принимает список файлов из STDIN
, а при распаковке – передает их в STDOUT
.
Содержание
Создание *.cpio архива
Для создания архива – используется опция -o
:
'-o, --create' Run in copy-out mode
Например:
$ touch file{1,2,3}.txt $ ls -l total 0 -rw-r--r-- 1 setevoy setevoy 0 Feb 29 11:33 file1.txt -rw-r--r-- 1 setevoy setevoy 0 Feb 29 11:33 file2.txt -rw-r--r-- 1 setevoy setevoy 0 Feb 29 11:33 file3.txt
С помощью ls
– получаем имя каждого файла в текущей директории, и передаем их на вход cpio
:
$ ls | cpio -o > filesarch.cpio 1 block $ ls -l total 4 -rw-r--r-- 1 setevoy setevoy 0 Feb 29 11:33 file1.txt -rw-r--r-- 1 setevoy setevoy 0 Feb 29 11:33 file2.txt -rw-r--r-- 1 setevoy setevoy 0 Feb 29 11:33 file3.txt -rw-r--r-- 1 setevoy setevoy 512 Feb 29 11:35 filesarch.cpio
Можно указать -v
(--verbose
) для более подробной информации:
$ ls | cpio -ov > filesarch.cpio file1.txt file2.txt file3.txt filesarch.cpio 1 block
Что бы добавить к архиву только определенные файлы – выполните выборку перед передачей имен в pipe.
Например:
$ ls | grep '2\|3' | cpio -ov > filesarch.cpio file2.txt file3.txt 1 block
Или:
$ find . -name '*2.txt' -o -name '*3.txt' | cpio -ov > filesarch.cpio ./file2.txt ./file3.txt 1 block
Что бы сохранить информацию об mtime
(Modification Time) – добавьте опцию -m
.
Извлечение *.cpio архивов
Для извлечения файлов из архива – используется опция -i
:
'-i, --extract' Run in copy-in mode.
Например:
$ rm -v file*.txt removed 'file1.txt' removed 'file2.txt' removed 'file3.txt'
$ cpio -iv < filesarch.cpio file1.txt file2.txt file3.txt cpio: filesarch.cpio not created: newer or same age version exists filesarch.cpio 1 block
$ ls -l total 4 -rw-r--r-- 1 setevoy setevoy 0 Feb 29 11:46 file1.txt -rw-r--r-- 1 setevoy setevoy 0 Feb 29 11:46 file2.txt -rw-r--r-- 1 setevoy setevoy 0 Feb 29 11:46 file3.txt -rw-r--r-- 1 setevoy setevoy 512 Feb 29 11:35 filesarch.cpio
Для извлечения только определенный файл – передайте его (или маску для имен файлов) аргументом.
Например:
$ cpio -iv < filesarch.cpio file3.txt file3.txt 1 block
$ cpio -iv < filesarch.cpio file{1,2}.txt file1.txt file2.txt 1 block
Просмотр содержимого *.cpio архива
Для просмотра содержимого архива – используйте опцию -t
:
'-t, --list' Print a table of contents of the input.
Например:
$ cpio -it < filesarch.cpio file2.txt file3.txt 1 block
Копирование дерева директорий
cpio
так же позволяет выполнить копирование каталога и всех вложенных данных без необходимости создавать промежуточный архив.
Например:
$ find . -name "*.txt" | cpio -vpdm /tmp/2 /tmp/2/./file2.txt /tmp/2/./file1.txt /tmp/2/./file3.txt 0 blocks
$ ls -l /tmp/2/ total 0 -rw-r--r-- 1 setevoy setevoy 0 Feb 29 11:48 file1.txt -rw-r--r-- 1 setevoy setevoy 0 Feb 29 11:48 file2.txt -rw-r--r-- 1 setevoy setevoy 0 Feb 29 11:49 file3.txt
Тут -p
– Copy-pass mode, -m
– сохранить информацию об mtime
файлов, и -d
– создавать каталоги при необходимости.
cpio и другие форматы
cpio
поддерживает работу с форматами данных.
Например, для создания tar-архива – укажите tar после поции -H
(--format
):
$ find . -name "*.txt" | cpio -ov -H tar > filesarch.tar ./file2.txt ./file1.txt ./file3.txt 5 blocks
$ tar tf filesarch.tar file2.txt file1.txt file3.txt
Хотя и *.cpio
для tar
давно не проблема:
$ tar tf filesarch.cpio file2.txt file1.txt file3.txt
Ссылки по теме