GNU cpio开源项目

我要开发同款
匿名用户2011年10月19日
87阅读
所属分类C/C++、应用工具、操作系统工具
授权协议GPL

作品详情

tar和cpio类似,从备份来看二者基本等效。都能将文件存到磁带并取出文件。都能使用几乎所有介质,因为核心设备驱动处理低级设备操作,对用户级程序看来所有设备都差不多。有些unix的软件包就是cpio压的。cpio用法举例:带目录结构拷贝指定文件到指定目录:find/backup/svr-name"63201.rpt"|cpio-pdl/print将带目录结构的指定文件拷贝到一个指定的文件:find.-name"63201.rpt"|cpio-ov63201.cpio从文件中恢复:cpio-ivd63201.cpio

为什么cpio比tar好?有这样几个原因。1、cpio会保留硬连接(hardlink),备份的时候这个很重要2、cpio没有文件名长度的限制。确实,guntar在这一点上做过改进,允许使用长文件名(实际上是创建了一个临时文件用来保存实际的文件名),但是在非gnu的tar工具上仍然存在这个问题。3、默认情况下,cpio保留时间戳4、在编写脚本的时候,cpio可以更好的控制要操作哪些文件。因为cpio需要显式的制定要操作的文件列表,例如下面哪个更加容易理解?

find.-typef-name'*.sh'-print|cpio-o|gzip>sh.cpio.gz

这儿有一个需要特别注意的:对于包含大量文件的列表,不能将find放在反引号(`)内,因为命令行长度会超出长度限制,因此必须使用中间文件。find和tar分开跑很明显会使得速度减慢。

下面这个例子更加复杂,将一部分文件打包到一个文件中,其它部分打包到另外一个文件中:

find.-depth-print>/tmp/files  egrep    '\.sh$'/tmp/files|cpio-o|gzip>with.cpio.gz  egrep-v'\.sh$'/tmp/files|cpio-o|gzip>without.cpio.gz

同样的,find和tar分开跑会使得速度变慢。创建多个中间文件也搞出了更多的混乱。gnutar稍好些,但是它的命令行参数却是不兼容的。

5、如果有很多文件需要通过网络在两台机器之间复制,则可以并行的跑几个cpio。例如:

find.-depth-print>/tmp/files  split/tmp/files  forFin/tmp/files??;do  cat$F|cpio-o|sshdestination"cd/target&&cpio-idum"&  done
声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!
下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态

评论