
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
Ссылки по теме




