cpio
从归档中复制文件, 或者复制文件到归档中. 此命令的适用范围: RedHat,RHEL,Ubuntu,CentOS,SUSE,openSUSE,Fedora.
Cpio 命令有三种工作模式:
1)copy-out mode,cpio 指令将文件复制到归档. 它读取标准输入上的文件名列表 (每行一个), 将归档包写到标准输出.
2)copy-in mode,cpio 指令从归档中复制文件, 从标准输入读取归档包.
3)cpio-pass mode, 从目录树复制文件到另一个目录, 它从标准输入中读取要复制的文件列表.
1, 语法
- cpio -o namelist > archive
- cpio -i < archive
- cpio -p dst-dir <namelist
2, 选项列表
选项 | 说明 |
-? | --help | 帮助信息 |
--version | 显示命令版本信息 |
主操作模式 |
|
-i | --extract | 从包中提取文件,copy-in 模式 |
-o | --create | 创建包,copy-out 模式 |
-p | --pass-through | 运行 copy-pass 模式 |
-t | --list | 打印输入内容列表 |
-l | --list | 对于每一个压缩的文件,列出压缩文件大小、解压大小、压缩比列、压缩前的文件名字 |
应用在所有模式的选项 |
|
-B | 设置 IO 块的大小为 5120 字节 |
-c | 使用老式跨平台的归档格式 |
-f | 仅拷贝不匹配任意给定模式的文件 |
-F | 用文件名代替标准输入和输出 |
-n | --numeric-uid-gid | 在内容列表的详细信息中显示 uid 和 gid |
--quite | 不打印以拷贝的块数 |
-v | --verbose | 详细信息 |
-V | -dot | 每处理一个文件就打印一个 “.” |
应用于 copy-in 的徐昂想 |
|
-b | --swap |
|
-r | --rename | 交互式重命名 |
-E | 把指定文件的内容当做匹配字符串 |
应用于 copy-out 的选项 |
|
-A | --append | 追加到文档的结尾 |
-O | 使用包文件名,而不是标准输入输出 |
应用于 copy-pass 的选项 |
|
-l | --link | 在执行时尽可能创建链接,而不是复制文件 |
应用于 copy-in 和 copy-out |
|
--absolute-filenames | 文件名不出去文件系统前缀 |
--no-absolute-filenames | 当前目录创建所有文件 |
应用于 copy-out 和 copy-pass |
|
-0 | --null | 输入文件名以 null 字符结尾 |
-a | --reset-access-time | 文件读取后,还原文件的访问时间 |
-I | 从文件读入 |
-R | --owner | 设置所有文件的组合用户信息 |
应用于 copy-in 和 copy-pass |
|
-d | 必要时创建目录 |
-m | 创建文件是,保留文件修改时间属性 |
-u | 无条件覆盖 |
3, 例子代码
% ls | cpio -ov> directory.cpio
归档当前目录下的内容, 并且制定输出文件
% find . -print -depth | cpio -ov> tree.cpio
存档整个目录树, find 命令可以将文件列表提供给 cpio. 这将获取当前目录中的所有文件, 以及下面的目录, 并将它们放置在归档目录 tree.cpio 中
% cpio -iv <directory.cpio
这将检索存档在文件 directory.cpio 中的文件, 并将它们放在当前目录中
% cpio -idv < tree.cpio
这将获取存档 tree.cpio 的内容, 并将其解压缩到当前目录.
% find . -depth -print0 | cpio --null -pvd new-dir
将当前目录的文件和子目录复制到一个名为 new-dir 的新目录中
4, 实例
1) 将当前目录归档
[root@localhost weijie]# ls | cpio -o> mybak // 将 ls 的输出定向到 cpio, 然后归档
1 块
- [root@localhost weijie]# ls
- 11.c 1.c 2.c 3.c 4.c 5.c 6.c mybak
2) 从归档中提取文件
[root@localhost weijie]# cpio -i < mybak // 从归档中提取
cpio: 未创建 11.c: 已有更新或同样新的版本存在
cpio: 未创建 5.c: 已有更新或同样新的版本存在
cpio: 未创建 6.c: 已有更新或同样新的版本存在
cpio: 未创建 mybak: 已有更新或同样新的版本存在
1 块
- [root@localhost weijie]# ls
- 11.c 1.c 2.c 3.c 4.c 5.c 6.c mybak
3) 拷贝文件
- [root@localhost weijie]# cat list.c
- 1.c
- 2.c
- 3.c
- [root@localhost weijie]# cpio -p bak/ < list.c // 将 list.c 中的内容当做文件列表, 然后拷贝到 bak 目录
cpio: 忽略空行
1 块
- [root@localhost weijie]# ls bak/
- 1.c 2.c 3.c
来源: http://www.bubuko.com/infodetail-2883615.html