当前位置: 首页 > news >正文

cpio 命令

前言

cpio(Copy In and Out)是一种在类 Unix 操作系统中处理归档文件的多功能工具。与 tar 不同,cpio 有其独特的优势和使用场景,特别是在与其他命令结合使用时。本文将带你了解 cpio 的基础知识、用法及实际示例。

什么是 cpio?

cpio 是一个命令行工具,用于创建或提取归档文件。它可以从标准输入读取文件列表,然后创建归档文件,或者从归档文件中提取文件。cpio 常用于备份、恢复、和软件安装等任务。

基本用法

cpio 有三种主要的操作模式:

  1. 复制出(Copy Out)模式:将文件写入归档文件。
  2. 复制入(Copy In)模式:从归档文件中提取文件。
  3. 传递(Pass-Through)模式:将文件从一个目录树复制到另一个目录树,同时保持文件属性。

复制出(创建归档文件)

find /path/to/source | cpio -o > archive.cpio

此命令使用 find 查找 /path/to/source 目录下的所有文件,并将其通过管道传递给 cpio,生成一个名为 archive.cpio 的归档文件。

cpio 的输入需要来自于标准输入或管道,并且输入的是文件名而不是文件内容,以下是几个示例:

nvidia@nvidia-desktop:~/tmp$ cat a.txt 
123
nvidia@nvidia-desktop:~/tmp$ cpio -o
a.txt
�q������f�a.txt123
�qTRAILER!!!1 block
nvidia@nvidia-desktop:~/tmp$ echo a.txt | cpio -o
�q������f�a.txt123
�qTRAILER!!!1 block
nvidia@nvidia-desktop:~/tmp$ ls | cpio -o
�q������f�a.txt123
�qTRAILER!!!1 block

cpio -o 直接将内容输出至标准输出,所以,一般我们会将输出重定向到文件

nvidia@nvidia-desktop:~/tmp$ find ./ > ../a.cpio
nvidia@nvidia-desktop:~/tmp$ echo a.txt | cpio -o > ../a.cpio 
1 block
nvidia@nvidia-desktop:~/tmp$ ls | cpio -o > ../a.cpio 
1 block

复制入(提取归档文件)

cpio -i < archive.cpio

此命令将提取 archive.cpio 归档文件中的所有文件到当前目录。

实例

nvidia@nvidia-desktop:~$ cpio -i < a.cpio 
1 block
nvidia@nvidia-desktop:~$ ls
a.cpio   a.txt
nvidia@nvidia-desktop:~$ cat a.txt 
123

传递模式

find /path/to/source -print | cpio -pdm /path/to/destination

此命令将 /path/to/source 目录下的所有文件复制到 /path/to/destination 目录,同时保留文件属性。

高级用法

压缩和解压

可以使用 gzip 或 bzip2 来压缩或解压 cpio 归档文件:

压缩

find /path/to/source -print | cpio -o | gzip > archive.cpio.gz

实例

nvidia@nvidia-desktop:~/tmp$ find ./ | cpio -o | gzip > a.cpio.gz
1 block

解压

gzip -d < archive.cpio.gz | cpio -i

实例

nvidia@nvidia-desktop:~$ gzip -d < tmp/a.cpio.gz | cpio -i
1 block
nvidia@nvidia-desktop:~$ ls
a.cpio     a.cpio.gz  a.txt

总结

cpio 是一个强大的工具,适用于多种文件处理任务。通过与其他命令结合使用,它能够实现更复杂的文件操作。无论是创建备份、恢复数据还是安装软件,cpio 都是一个值得掌握的工具。希望这篇文章能帮助你更好地理解和使用 cpio。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • element-ui周选择器,如何获取年、周、起止日期?
  • C# Type 对象序列化与反序列化
  • 合并两个有序数组(LeetCode)
  • oracle创建dblink使得数据库A能够访问数据库B表LMEAS_MFG_FM的数据
  • sql获取过去的小时数
  • vue请求springboot接口下载zip文件
  • 【书生大模型实战营第三期 | 入门岛第3关-Git 基础知识】
  • java并发包AtomicInteger类
  • PHP之docker学习笔记
  • uni-app接人腾讯地图
  • 240811-Gradio通过鼠标右键添加事件函数的功能
  • Springboot实现邮箱发送
  • 014集——浮点数值类型——C#学习笔记
  • yarn的淘宝镜像
  • 【代码随想录】有序数组的平方
  • 分享一款快速APP功能测试工具
  • @angular/forms 源码解析之双向绑定
  • [译] 理解数组在 PHP 内部的实现(给PHP开发者的PHP源码-第四部分)
  • [译]Python中的类属性与实例属性的区别
  • JavaScript的使用你知道几种?(上)
  • js正则,这点儿就够用了
  • Leetcode 27 Remove Element
  • Lsb图片隐写
  • mysql外键的使用
  • php的插入排序,通过双层for循环
  • React系列之 Redux 架构模式
  • RxJS 实现摩斯密码(Morse) 【内附脑图】
  • Service Worker
  • Spring-boot 启动时碰到的错误
  • 从零开始学习部署
  • 基于MaxCompute打造轻盈的人人车移动端数据平台
  • 开源SQL-on-Hadoop系统一览
  • 扑朔迷离的属性和特性【彻底弄清】
  • 强力优化Rancher k8s中国区的使用体验
  • 容器化应用: 在阿里云搭建多节点 Openshift 集群
  • 推荐一款sublime text 3 支持JSX和es201x 代码格式化的插件
  • 移动互联网+智能运营体系搭建=你家有金矿啊!
  • 2017年360最后一道编程题
  • AI又要和人类“对打”,Deepmind宣布《星战Ⅱ》即将开始 ...
  • Unity3D - 异步加载游戏场景与异步加载游戏资源进度条 ...
  • 格斗健身潮牌24KiCK获近千万Pre-A轮融资,用户留存高达9个月 ...
  • 没有任何编程基础可以直接学习python语言吗?学会后能够做什么? ...
  • 你学不懂C语言,是因为不懂编写C程序的7个步骤 ...
  • ​ 全球云科技基础设施:亚马逊云科技的海外服务器网络如何演进
  • #1014 : Trie树
  • #162 (Div. 2)
  • #pragam once 和 #ifndef 预编译头
  • #WEB前端(HTML属性)
  • $(document).ready(function(){}), $().ready(function(){})和$(function(){})三者区别
  • (day18) leetcode 204.计数质数
  • (附源码)python旅游推荐系统 毕业设计 250623
  • (个人笔记质量不佳)SQL 左连接、右连接、内连接的区别
  • (教学思路 C#之类三)方法参数类型(ref、out、parmas)
  • (全部习题答案)研究生英语读写教程基础级教师用书PDF|| 研究生英语读写教程提高级教师用书PDF
  • (一) storm的集群安装与配置