Cpio 命令

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

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

cpio stands for “copy in, copy out”.

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

它可以干三种事:

  1. 把文件复制到某个归档文件中
  2. 从某个归档文件中提取文件

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像是一个文件流操作器, 压缩也好, 解压也好, 复制也好, 都是以一种数据流的形式进行操作.

扩展阅读

results matching ""

    No results matching ""