Cpio 命令

这个cpio我是第一次听说, 如有不妥的地方还请大家指正.

cpio命令是用来处理归档文件的, 这里的归档文件包括 .cpio , .tar


cpio stands for “copy in, copy out”.


说的很明白, 复制进来, 复制出去. 果真Linux的软件命名都是根据内容来的, 直观易懂.

它可以干三种事:

  • 把文件复制到某个归档文件中
  • 从某个归档文件中提取文件
  • cpio从标准输入中读取文件列表, 创建一个归档文件后把这些文件都输入到里面, 最后再输出到标准输出中(或者重定向).
创建cpio归档
  1. cd test/
  2. ls
  3. cal_random.sh catshadow.c numbers.bz2 vpnn
  4. catshadow.bz2 helloword.py test.php
  5. ls | cpio -ov > test.cpio # o-创建归档文件
  6. cal_random.sh
  7. catshadow.bz2
  8. catshadow.c
  9. helloword.py
  10. numbers.bz2
  11. test.php
  12. vpnn
  13. 248 blocks
  14. ls -l test.cpio
  15. -rw-rw-r-- 1 mr mr 124K 1 5 20:46 test.cpio

正如你所看到的, 把ls 列出的文件通过管道传递给cpio后, cpio将他们压缩, 然后我们再通过重定向,导入到了test.cpio文件中.

提取cpio中的文件

接着上一个目录中的内容, 我们新建一个目录, 把文件提取出来:

  1. mkdir cpio
  2. mkdir: created directory cpio
  3. cd cpio/
  4. ls
  5. cpio -idv < ../test.cpio # i-从归档文件中提取
  6. cal_random.sh
  7. catshadow.bz2
  8. catshadow.c
  9. helloword.py
  10. numbers.bz2
  11. test.cpio
  12. test.php
  13. vpnn
  14. 494 blocks
  15. ls
  16. cal_random.sh catshadow.c numbers.bz2 test.php
  17. catshadow.bz2 helloword.py test.cpio vpnn

看到了么, cpio从标准输入中读取了归档文件, 然后把里面的文件提取了出来.

归档特定的文件

  1. find . -iname *.c -print | cpio -ov >/tmp/c_files.cpio
  2. ./catshadow.c
  3. 1 block

这里没啥好说的, 就是利用了find而已.

用cpio创建tar文件

我们可以用cpio创建一个.tar类型的文件:

  1. ls | cpio -ov -H tar -F sample.tar

殊途同归.

怎样提取呢?

  1. cpio -idv -F sample.tar

用上面这个.

我们可以看到, 除了利用重定向, 我们还可以用-F的参数来定义所要操作的文件.

还有, 不解压查看tar文件里面的文件名:

  1. cpio -it -F sample.tar

作者还列举了几个不常用的:

1.将符号链接所指向的内容打包:

  1. ls | cpio -oLv >/tmp/test.cpio

2.保留文件的修改时间

  1. ls | cpio -omv >/tmp/test.cpio

3.拷贝文件夹

  1. $ mkdir /mnt/out
  2. $ cd objects
  3. $ find . -depth | cpio -pmdv /mnt/out

个人感觉cpio像是一个文件流操作器, 压缩也好, 解压也好, 复制也好, 都是以一种数据流的形式进行操作.

扩展阅读