cpio
cpio将文件复制到存档中或从存档中复制文件。
查看英文版
1 cpio 运行系统环境
2 cpio 说明
3 cpio 语法
4 cpio 例子
cpio 运行系统环境
Linux
cpio 说明
GNU cpio是用于创建和提取档案,或将文件从一个地方复制到另一个地方的工具。它处理许多cpio格式以及读写tar文件。
支持以下存档格式:二进制,旧ASCII,新ASCII,CRC,HP-UX二进制,HP-UX旧ASCII,旧tar和POSIX .1 tar。提供tar格式是为了与tar程序兼容。默认情况下,cpio创建二进制格式的归档文件,以与较早的cpio程序兼容。从存档中提取时,cpio会自动识别它正在读取的存档类型,并且可以读取在具有不同字节顺序的计算机上创建的存档。
查看英文版
cpio 语法
复制输出模式语法:
在复制模式下,cpio将文件复制到归档文件中。它读取标准输入上的文件名列表(每行一个),并将存档写入标准输出。生成文件名列表的一种典型方法是使用find命令。
cpio {-o|--create} [-0acvABLV] [-C bytes] [-H format] [-M message] [-O [[user@]host:]archive] [-F [[user@]host:]archive] [--file=[[user@]host:]archive] [--format=format] [--message=message][--null] [--reset-access-time] [--verbose] [--dot] [--append] [--block-size=blocks] [--dereference] [--io-size=bytes] [--rsh-command=command] [--help] [--version] < name-list [> archive]
复制模式语法:
在复制模式下,cpio将文件复制出归档文件或列出归档文件内容。它从标准输入中读取存档。任何非选项命令行 参数都是shell的 glob模式。仅从存档中复制名称与这些模式中的一种或多种匹配的存档文件。与外壳不同,首字母为' 。文件名中的'确实与模式开头的通配符匹配,文件名中的' / '可以匹配通配符。如果未提供任何模式,则将提取所有文件。复制模式的语法:
cpio {-i|--extract} [-bcdfmnrtsuvBSV] [-C bytes] [-E file] [-H format] [-M message] [-R [user][:.][group]] [-I [[user@]host:]archive] [-F [[user@]host:]archive] [--file=[[user@]host:]archive] [--make-directories] [--nonmatching] [--preserve-modification-time] [--numeric-uid-gid] [--rename] [-t|--list] [--swap-bytes] [--swap] [--dot] [--unconditional] [--verbose] [--block-size=blocks] [--swap-halfwords] [--io-size=bytes] [--pattern-file=file] [--format=format] [--owner=[user][:.][group]] [--no-preserve-owner] [--message=message] [--force-local] [--no-absolute-filenames] [--absolute-filenames] [--sparse] [--only-verify-crc] [--to-stdout] [--quiet] [--rsh-command=command] [--help] [--version] [pattern...] [< archive]
复制通过模式语法:
在复制通过模式下,cpio将文件从一个目录树复制到另一个目录树,将复制和复制步骤组合在一起,而无需实际使用归档。它从标准输入中读取要复制的文件列表。将它们复制到的目录作为非选项参数给出。复制通过模式语法:
cpio {-p|--pass-through} [-0adlmuvLV] [-R [user][:.][group]] [--null] [--reset-access-time] [--make-directories] [--link] [--quiet] [--preserve-modification-time] [--unconditional] [--verbose] [--dot] [--dereference] [--owner=[user][:.][group]] [--no-preserve-owner] [--sparse] [--help] [--version] destination-directory < name-list
选件
-0, --null | 读取以空字符结尾的文件名列表,而不是换行符,以便可以存储名称包含换行符的文件。GNU find是产生以空值结尾的文件名列表的一种方法。此选项可以在复制和复制通过模式下使用。 |
-a, --reset-access-time | 读取文件后,重置文件的访问时间,以使其看起来不像已被读取。 |
-A, --append | 追加 追加到现有存档。仅在复制模式下工作。归档文件必须是使用-O或-F(-file)选项指定的磁盘文件。 |
-b, --swap | 交换 交换数据中的单词半字和字节半字节。等效于-sS。此选项可以在复制模式下使用。使用此选项可转换的32位 整数大端之间尾数和little-endian机器。 |
-B | 将I / O 块大小设置为5120字节。最初,块大小为512字节。 |
--block-size=BLOCK-SIZE | 将I / O块大小设置为BLOCK-SIZE * 512字节。 |
-c | 与' -H newc ' 相同;使用新的(SVR4)可移植格式。如果要使用旧的可移植(ASCII)归档格式,请改用' -H odc '。 |
-C IO-SIZE, --io-size=IO-SIZE | 将I / O块大小设置为IO-SIZE字节。 |
-d, --make-directories | 在需要的地方创建引导目录。 |
-E FILE, --pattern-file=FILE | 阅读其他指定文件名的模式以从FILE中提取或列出。FILE的行被视为cpio的非选项参数。此选项在复制模式下使用。 |
-f, --nonmatching | 仅复制与任何给定模式都不匹配的文件。 |
-F, --file=archive | 要使用的归档文件名,而不是标准输入或输出。要将另一台计算机上的磁带机用作存档,请使用以“ HOSTNAME: ” 开头的文件名。该主机可以通过前面的用户名和一个“ @ ”来访问远程磁带驱动器作为用户,如果你有权限这样做(在该用户的“的条目〜/ .rhosts中 ”文件)。 |
--force-local | 使用-F,-I或-O,即使存档文件名包含冒号(通常会指示远程主机名),也可以将其作为本地文件。 |
-H FORMAT, --format=FORMAT |
使用存档格式FORMAT。有效格式如下:在大写字母中也可以识别相同的名称。复制模式下的默认设置是自动检测存档格式,复制模式下的默认设置是' bin '。 bin: 过时的二进制格式。 odc: 旧的(POSIX .1)可移植格式。 newc: 新的(SVR4)可移植格式,支持具有超过65536个inode的文件系统。 crc: 添加了校验和的新(SVR4)可移植格式。 tar: 旧的tar格式。 ustar: POSIX .1 tar格式。另外,可以识别相似但不相同的GNU tar存档。 hpbin: HP-UX的cpio使用的过时二进制格式(以不同方式存储设备文件)。 hpodc: HP-UX的cpio使用的可移植格式(以不同方式存储设备文件)。 |
-i, --extract | 在复制模式下运行。(请参阅“ 复制模式 ”)。 |
-I archive | 要使用的归档文件名,而不是标准输入。要将另一台计算机上的磁带机用作存档,请使用以“ HOSTNAME: ” 开头的文件名。主机名前面可以有一个用户名和一个@,以该用户的身份访问远程磁带驱动器(如果您具有这样做的权限)(该用户的〜/ .rhosts文件中的一项)。 |
-k | 忽略 与其他版本的cpio兼容。 |
-l, --link | 尽可能链接文件而不是复制它们。 |
-L, --dereference | 复制符号链接指向的文件,而不是符号链接本身。 |
-m, --preserve-modification-time | 创建文件时,请保留以前的文件修改时间。 |
-M MESSAGE, --message=MESSAGE | 当备份介质(例如磁带或软盘)的卷结束时,请打印MESSAGE,以提示用户插入新的卷。如果MESSAGE包含字符串' %d ',则将其替换为当前卷号(从1开始)。 |
-n, --numeric-uid-gid | 使用' --verbose '选项时,显示数字UID和GID而不是将其转换为名称。 |
--no-absolute-filenames | 即使在归档中具有绝对文件名,也以复制方式创建相对于当前目录的所有文件。 |
--absolute-filenames | 这是默认设置:在插入模式下,告诉cpio不要从文件名中删除包含“ .. ”和前导斜杠的前导文件名组件。 |
--no-preserve-owner | 不要更改文件的所有权;留给用户解压缩。这是非root用户的默认设置,因此System V上的用户不会无意中放弃文件。此选项可用于复制输入模式和复制通过模式。 |
-o, --create | 在复制模式下运行。(请参阅“ 复制模式 ”)。 |
-O archive | 要使用的归档文件名,而不是标准输出。要将另一台计算机上的磁带机用作存档,请使用以“ HOSTNAME: ” 开头的文件名。主机名前面可以有一个用户名和一个@,以该用户的身份访问远程磁带驱动器(如果您具有这样做的权限)(该用户的〜/ .rhosts文件中的一项)。 |
--only-verify-crc | 读取CRC格式的存档时,请验证存档中每个文件的CRC。实际不提取文件。 |
-p, --pass-through | 在复制通过模式下运行。(请参阅“ 复制通过模式 ”)。 |
--quiet | 不要打印复制的块数。 |
-r, --rename | 交互式重命名文件。 |
-R [user][:.][group], --owner [user][:.][group] | 在复制和复制通过模式下,将创建的所有文件的所有权设置给指定的用户和/或组。用户,组或两者都必须存在。如果省略该组,但使用' : '或' 。'给出分隔符,使用给定用户的登录组。只有超级用户可以更改文件的所有权。 |
--rsh-command=COMMAND | 通知应使用COMMAND与远程设备通信的cpio。 |
-s, --swap-bytes | 交换文件中每个半字的字节(一对字节)。此选项可以在复制模式下使用。 |
-S, --swap-halfwords | 交换文件中每个单词的半字(4个字节)。此选项可以在复制模式下使用。 |
--sparse | 将大块零的文件写为稀疏文件。此选项用于复制和复制通过模式。 |
-t, --list | 打印输入的目录。 |
--to-stdout | 将文件提取到标准输出。此选项可以在复制模式下使用。 |
-u, --unconditional | 替换所有文件,而无需询问是否用旧文件替换现有的新文件。 |
-v, --verbose | 列出已处理的文件,或使用“ -t ” 列出目录的“ ls -l ”样式表。在ustar归档文件的详细目录中,归档文件中本地系统上不存在的用户名和组名被替换为与存储在归档文件中的数字UID和GID本地对应的名称。 |
-V, --dot | 打印一个' 。',用于处理的每个文件。 |
--version | 打印cpio程序的版本号并退出。 |
查看英文版
cpio 例子
创建归档文件时,cpio从标准输入中获取要处理的文件列表,然后将归档文件发送到标准输出或“ -F ”选项定义的设备。通常使用find或ls将此列表提供给标准输入。在以下示例中,您可以看到归档单个目录内容的可能性:
% ls | cpio -ov > directory.cpio
该“ -o ”选项创建存档,而“ -v ”选项打印文件的名称存档,因为他们补充说。请注意,这些选项可以放在单个' - '之后,也可以在命令行上单独放置。“ > ”将cpio输出重定向到文件“ directory.cpio ”。
如果要归档整个目录树,则find命令可以将文件列表提供给cpio:
% find . -print -depth | cpio -ov > tree.cpio
这将把当前目录中的所有文件(位于下面的目录)放入归档文件tree.cpio中。同样,“ -o ”创建了一个归档文件,“ -v ”选项为您显示了归档文件的名称(请参见“ 复制模式 ”)。使用' 。find语句中的'为您提供了恢复时的更大灵活性,因为它将通过硬连线的绝对路径使用相对路径保存文件名。' -depth '选项强制' find'在打印目录本身之前打印目录中的条目。通过在目录名称本身之前打印目录中的目录条目,可以限制限制性目录权限的影响。
提取存档需要更多的考虑,因为cpio默认情况下不会创建目录。另一个特点是,除非指定,否则不会覆盖现有文件。
% cpio -iv < directory.cpio
这将检索在文件directory.cpio中归档的文件,并将它们放在当前目录中。' -i '选项提取存档,而' -v '显示提取时的文件名。如果要处理已归档的目录树,则需要使用' -d '选项来根据需要创建目录,例如:
% cpio -idv < tree.cpio
这将获取归档文件tree.cpio的内容并将其解压缩到当前目录。如果您尝试在已经存在(并且具有相同或更高修改时间)的同名文件之上提取文件,除非-u选项告知cpio,否则cpio将不会提取该文件(请参见“ 复制”模式 ')。
在复制通过模式下,cpio将文件从一个目录树复制到另一个目录树,将复制和复制步骤组合在一起,而无需实际使用归档。它从标准输入中读取要复制的文件列表。将它们复制到的目录是一个非选项参数(请参阅“ 复制通过模式 ”)。
% find . -depth -print0 | cpio --null -pvd new-dir
该示例显示了将当前目录和子目录的文件复制到名为new-dir的新目录中。一些新选项是GNU find提供的' -print0 ',以及cpio的' --null '选项。这两个选项一起起作用,以在find和cpio之间发送文件名,即使文件名中嵌入了特殊字符也是如此。另一个是“ -p ”,它告诉cpio将找到的文件传递到目录“ new-dir ”。
find . -print | cpio -ocv > /dev/fd0
在上面,使用find命令将列出所有文件和目录,并使用cpio命令将列出的那些文件复制到软盘驱动器中。
find . -print | cpio -dumpv /home/users/hope
在上面的示例中,find命令将列出当前目录的所有文件和子目录,并将它们通过管道传送到cpio命令,该命令会将这些文件复制到希望用户帐户。
cpio -icuvd < /dev/fd0
上面的命令将从软盘恢复文件。
查看英文版