最近我们研发不知道中了什么魔,开始使用cpio来打包程序,发布.以前习惯了用tar,cpio还是需要习惯一下.
查了查IBM的文档,将一些常用cpio使用列在这里,详细IBM文档见后面.
解压整个cpio文档:
cpio -idmv < aaa.cpio
列出归档中所有文件信息
cpio -itv < aaa.cpio
释放出归档中指定文件列表(文件名称要与归档使用的路径相同,如相对路径等)cpio -idmv filenlist < aaa.cpio
========================================================================
cpio 命令
用途
把文件拷贝进出归档存储器及目录。本文档描述了 AIX cpio 命令和System V cpio 命令。
语法
cpio -o [ a ] [ c ] [ -E{force|ignore|warn} ] [ v ] [ B | C Value ] <FileName >Output
cpio -i [ b ] [ c ] [ d ] [ -E{force|ignore|warn} ] [ f ] [ m ] [ M ] [ r ] [ s ] [ t ] [ u ] [ v ] [ S ] [ 6 ] [ B | C Value ] [ Pattern... ] <Input
cpio -p [ a ] [ d ] [ -E{force|ignore|warn} ] [ l ] [ m ] [ M ] [ u ] [ v ] Directory <FileName
描述
cpio 命令把文件从 cpio 归档中拷贝进出。cpio 归档可能跨越多个卷。-i、-o 和 -p 标志选择了要执行的操作。
注: 如果您把输出从 cpio 命令重定向到一个特殊文件(设备),您应该把输出重定向到一个原始设备而不是一个块设备。因为写块设备是异步地完成的,没有办法知道是否到达了设备的末端。
注:
- cpio 命令由于 XPG/4 和 POSIX.2 标准的限制,当文件的大小超过 2G 时是不能启用的。
- cpio 不保存任何稀疏分配的文件的稀疏特性。任何在恢复前原本稀疏的文件将在文件系统中根据大小分配所有的空间。
cpio -o 命令
cpio -o 命令从标准输入中读出文件路径名并且把这些文件连同路径名和状态信息拷贝到标准输出中。避免给予cpio 命令由许多唯一链接的文件组成的路径名,因为可能没有足够的存储器来跟踪它们,并可能会导致链接信息的丢失。
cpio -i 命令
cpio -i 命令从标准输入中读入一个由 cpio -o 命令创建的归档,并且从中拷贝和 Pattern 参数相匹配的文件连同名称。这些文件被拷贝进当前目录树中。您可以列出多个的 Pattern 参数,通过使用 ksh 命令中描述的文件名符号表示法。注意在这个应用程序中,特殊字符 * (星号),? (问号),和 [...] (方括号和省略号)除了在 ksh 命令中描述的使用,还匹配路径名中的 / (斜杠)。 Pattern 参数的缺省值是 * (星号),即选择输入中所有文件。在表达式例如 [a-z] 中,减号意味着根据当前的整理序列贯穿。
一个整理序列可以定义字符范围中使用的同等类。
cpio -p 命令
cpio -p 命令从标准输入中读入文件路径名并且把这些文件拷贝到由 Directory 参数指定的目录中。指定的目录必须已经存在。如果这些路径名包括了不存在的目录名,您必须用 d 标志来创建指定的目录。
注: 只要您有 root 用户的权力,您就可以拷贝特殊文件。
参数
Directory | 指定目录。 |
<FileName | 指定文件名列表,cpio 命令用来作为输入。 |
>Output | 指定输出设备,例如磁盘或者文件。如想获得更多关于使用磁带设备的信息,请参考 rmt 特殊文件。 |
<Input | 指定输入设备(这里 Input 是由 cpio -o 命令创建的 Output 文件)。如想获得更多关于使用磁带设备的信息,请参阅 rmt 特殊文件。 |
Pattern | 指定命令使用的方式(如同 ksh 命令中描述的)。 Pattern 参数的缺省值是 * (星号),即选择 Input中所有的文件。 |
标志
所有的标志都必须列在一起,中间没有空格。以下 -o、-i 和 -p 标志不是所有的都可以一起使用。
a | 源文件的访问时间重新设置为先前的时间。 |
b | 交换字节和半字。
注: 正在处理的文件中如果有奇数个字节或者半字,那么数据会丢失。 |
B | 执行使用 512 字节的块输入输出到一个记录。
注:当使用 B 或 C 选项来抽取或是创建一个磁带归档时,块因子数必须是该磁带设备的物理块大小的倍数。 |
c | 以 ASCII 字符的形式读写头信息。如果 cpio 归档是使用 c 标志创建的,它必须使用 c 标志来抽取。 |
CValue | 执行由 Value 参数定义的 512 字节的倍数个字节到一个记录的块输入输出。例如,-C2 标志改变块输入输出到记录的大小为 1024 字节。 |
d | 创建需要的目录。 |
-E | -E 选项需要下列参数中的一个。如果您省略了 -E 选项,则warn 是缺省的 cpio 行为。
|
f | 拷贝除了匹配 Pattern 参数的所有文件。 |
l | 任何可能的时候,链接文件而不是拷贝他们。这个标志只可以和 cpio -p 命令一起使用。 |
m | 保留先前的文件修改时间。这个标志在拷贝目录时不起作用。 |
M | 即使目录被拷贝,保留先前文件的修改时间。 |
r | 交互式重命名文件。如果您不想改变文件名,输入单个句点或者按 <Enter> 键。在后一种情况下, cpio 命令不拷贝那个文件。 |
s | 交换字节。这个标志只和 cpio -i 命令一起使用。
注: 如果正在处理的文件中有奇数个字节,数据可能丢失。 |
S | 交换半字。这个标志只有在 cpio -i 命令中可用。
注: 如果正在处理的文件中有奇数个半字,数据可能丢失。 |
t | 创建一个目录。这个操作不拷贝任何文件。 |
u | 无条件拷贝。旧文件用同样的名字取代新文件。 |
v | 列出文件名。如果和 t 标志一起使用,输出看起来和 ls -l 命令相似。 |
6 | 处理一个旧文件(例如,一个以 UNIX 第六版格式写的文件)。这个标志只和 cpio -i 命令一起使用。 |
退出状态
这个命令返回以下退出值:
0 | 成功完成。 |
>0 | 有错误发生。 |
示例
- 要拷贝文件到磁盘上,输入
cpio -ov <filenames >/dev/rfd0
以压缩格式拷贝有 filenames 文件中列出的路径名的文件到磁盘(>/dev/rfd0)上。v 标志使得 cpio 命令显示它所拷贝的每一个文件的名字。这个命令在拷贝文件的备份时有用。磁盘必须已经格式化,但不必包含一个文件系统或已被安装。
注:uid 和 gid 的大小超过 65535 的文件不能用 cpio 命令归档。在这种情况下,使用者应该使用 backup 和 restore。
- 把当前目录中的文件拷贝到磁盘上,输入:
ls *.c | cpio -ov >/dev/rfd0
拷贝当前目录中所有名字以 .c 结尾的文件。
- 要拷贝当前目录和所有的子目录到磁盘上,输入:
find . -print | cpio -ov >/dev/rfd0
这将保存以当前目录(.)开始的目录树,并且包含它的所有子目录和文件。输入这个命令会更快:
find . -cpio /dev/rfd0 -print
-print 条目显示每一个被拷贝的文件的名字。
- 要用 cpio 命令列出已经保存到磁盘上的文件,输入:
cpio -itv </dev/rfd0
这显示先前保存到 /dev/rfd0 的,cpio 命令格式的文件的目录。这个清单和 ls -l 命令生成的长目录清单相似。只列出文件路径名,只要使用 -it 标志。
- 要从磁盘拷贝先前用 cpio 命令保存的文件,输入:
cpio -idmv </dev/rfd0
这将把先前用 cpio 命令保存到 /dev/rfd0 文件的文件拷贝回文件系统(指定 -i 标志)。d 标志在目录树被保存时,允许 cpio 命令创建适合的目录。 m 标志在保存文件时,保持最后的修改时间有效。 v 标志使得 cpio 命令显示每一个被拷贝的文件名。
- 从磁盘上拷贝选择的文件,输入:
cpio -i "*.c" "*.o" </dev/rfd0这样从磁盘上拷贝以 .c 或 .o 结束的文件。注意,模式 “*.c” 和 “*.o” 必须附上引号以阻止 shell 把 * (星号)作为一个模式匹配字符。 cpio 命令自己解码模式匹配字符,是一种特殊的情况。
- 要从磁盘拷贝文件时重命名文件,输入:
cpio -ir </dev/rfd0
-r 标志使得 cpio 命令询问您是否要在从磁盘拷贝文件前重命名每个文件。例如,消息:
Rename <prog.c>
询问是否要在以 prog.c 名字保存的文件被拷贝时给它一个新的名字。如果想重命名这个文件,输入新名字,按 Enter 键。如果想保持同样的名字,必须再次输入那个名字。要根本避免拷贝那个文件,按 Enter 键。
- 要拷贝目录和它的所有子目录,输入:
mkdir /home/jim/newdir find . -print | cpio -pdl /home/jim/newdir
这将复制当前的目录树,包括当前的目录和它的所有子目录及文件。复本放在新的 /home/jim/newdir 目录中。l 标志使得 cpio 命令在可能时链接文件而不是拷贝它们。
注: 对于 9348 Magnetic Tape Unit Model 12, cpio 的性能可以通过改变缺省的块大小来提高。如果想改变块大小,输入下面的命令行:
chdev -1 <device_name> -a block_size=32k
文件
/usr/bin/cpio | 包含 cpio 命令。 |
========================================================================