Cpio 命令
这个cpio
我是第一次听说, 如有不妥的地方还请大家指正.
cpio
命令是用来处理归档文件的, 这里的归档文件包括 .cpio
, .tar
cpio stands for “copy in, copy out”.
说的很明白, 复制进来, 复制出去. 果真Linux的软件命名都是根据内容来的, 直观易懂.
它可以干三种事:
- 把文件复制到某个归档文件中
- 从某个归档文件中提取文件
cpio
从标准输入中读取文件列表, 创建一个归档文件后把这些文件都输入到里面, 最后再输出到标准输出中(或者重定向).
创建cpio归档
➤ cd test/
➤ ls
cal_random.sh catshadow.c numbers.bz2 vpnn
catshadow.bz2 helloword.py test.php
➤ ls | cpio -ov > test.cpio # o-创建归档文件
cal_random.sh
catshadow.bz2
catshadow.c
helloword.py
numbers.bz2
test.php
vpnn
248 blocks
➤ ls -l test.cpio
-rw-rw-r-- 1 mr mr 124K 1月 5 20:46 test.cpio
正如你所看到的, 把ls
列出的文件通过管道传递给cpio
后, cpio
将他们压缩, 然后我们再通过重定向,导入到了test.cpio
文件中.
提取cpio中的文件
接着上一个目录中的内容, 我们新建一个目录, 把文件提取出来:
➤ mkdir cpio
mkdir: created directory ‘cpio’
➤ cd cpio/
➤ ls
➤ cpio -idv < ../test.cpio # i-从归档文件中提取
cal_random.sh
catshadow.bz2
catshadow.c
helloword.py
numbers.bz2
test.cpio
test.php
vpnn
494 blocks
➤ ls
cal_random.sh catshadow.c numbers.bz2 test.php
catshadow.bz2 helloword.py test.cpio vpnn
➤
看到了么, cpio
从标准输入中读取了归档文件, 然后把里面的文件提取了出来.
归档特定的文件
➤ find . -iname *.c -print | cpio -ov >/tmp/c_files.cpio
./catshadow.c
1 block
➤
这里没啥好说的, 就是利用了find
而已.
用cpio创建tar文件
我们可以用cpio
创建一个.tar
类型的文件:
ls | cpio -ov -H tar -F sample.tar
殊途同归.
怎样提取呢?
cpio -idv -F sample.tar
用上面这个.
我们可以看到, 除了利用重定向, 我们还可以用-F
的参数来定义所要操作的文件.
还有, 不解压查看tar
文件里面的文件名:
cpio -it -F sample.tar
作者还列举了几个不常用的:
1.将符号链接所指向的内容打包:
ls | cpio -oLv >/tmp/test.cpio
2.保留文件的修改时间
ls | cpio -omv >/tmp/test.cpio
3.拷贝文件夹
$ mkdir /mnt/out
$ cd objects
$ find . -depth | cpio -pmdv /mnt/out
个人感觉cpio
像是一个文件流操作器, 压缩也好, 解压也好, 复制也好, 都是以一种数据流的形式进行操作.