我收到了一个 Unix 软件发行版,它是压缩的 cpio 文件。提取这些文件的最佳命令是什么?
答案1
gzip -cd foo.cpio.gz | cpio -idmv
- i :提取(输入)
- d :创建目录
- m :保留 mtime
- v :详细
答案2
mkdir archive
cd archive
zcat ../archive.cpio.gz | cpio -idmv --no-absolute-filenames
虽然这是一个老问题,但它在 Google 上排名很高,所以我想我可以更新它。我总体上同意接受的答案,但除非您打算覆盖机器上的重要系统文件,否则您应该添加“--no-absolute-filenames”。此外,我个人更喜欢“zcat”,而不是“gzip -cd”或“gunzip -c”。
最后,请注意,如果您要提取包含设备节点的根文件系统,则需要以 root 身份运行 cpio(例如 sudo)。
答案3
例如,要将 /etc/httpd/ 的存档内容提取到当前目录,创建子目录 ./etc/httpd/
mkdir restored-etc-httpd
cd restored-etc-httpd
zcat archive.cpio.gz | cpio -idmv --no-absolute-filenames "*etc/httpd/*"
接受的答案和马特的答案都对我有帮助,但由于三个细节,我困惑了一段时间:
- 匹配的模式需要引用才能作为模式发挥作用 :P
- 该选项
--no-absolute-filenames
必须先行命令行上的模式 - 由于该选项会从文件名中删除前导字符
/
,因此匹配模式也必须省略前导字符/
答案4
这个维基百科页面cpio
有一些很好的注释。
有关详细信息,请参阅cpio
手动的。
来自同一维基百科页面的链接讨论与tar
档案的比较。
下面是一个例子使用cpio
格式tar
。