当前位置:  软件>C/C++软件

GNU cpio

    来源:    发布时间:2014-12-25

    本文导语:  tar 和cpio 类似,从备份来看二者基本等效。都能将文件存到磁带并取出文件。都能使用几乎所有介质,因为核心设备驱动处理低级设备操作,对用户级程序看来所有设备都差不多。有些unix 的软件包就是cpio压的。 cpio 用法举例...

tar 和cpio 类似,从备份来看二者基本等效。都能将文件存到磁带并取出文件。都能使用几乎所有介质,因为核心设备驱动处理低级设备操作,对用户级程序看来所有设备都差不多。有些unix
的软件包就是cpio压的。

cpio 用法举例:
带目录结构拷贝指定文件到指定目录:
find /backup/svr -name "63201.rpt" |cpio -pdl /print
将带目录结构的指定文件拷贝到一个指定的文件:
find . -name "63201.rpt" |cpio -ov 63201.cpio
从文件中恢复:
cpio -ivd 63201.cpio

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

find . -type f -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  
  • for F in /tmp/files?? ; do  
  • cat $F | cpio -o | ssh destination "cd /target && cpio -idum" &  
  • done

  •     
     
     

    您可能感兴趣的文章:

     
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3