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
从归档中复制文件,或者复制文件到归档中。此命令的适用范围: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