我有一个包含大量文件的 cpio 存档,我只需要提取一个文件,而不是全部。我tar
可以只使用tar -xf archive.tar path/to/file
,但这不适用于cpio
:
cpio -i < archive.cpio path/to/file
bash: path/to/file: No such file or directory
有谁知道如何从存档中提取单个文件cpio
?
答案1
如果不存在,您应该使用该-d
选项来cpio
创建主目录 ( ):path/to
cpio -id < archive.cpio path/to/file
另外,bsdtar
(FreeBSD 上的常规tar
)知道如何提取 cpio 档案,无论是否压缩。
答案2
如果您想立即在管道中使用该文件,您可以跳过-d
并添加--to--stdout
这是一个过度的示例 - 检查 initramfs cpio 中可执行文件的 MD5SUM
$ objdump -sj '.init.ramfs' ./usr/initramfs_data.o | \
tail -n +5 | \
cut -b1-44 | \
xxd -r | \
gunzip | \
cpio --to-stdout -i usr/bin/mount 2>/dev/null | \
md5sum
bffe60496ce15be471e7cfc04c14fac5 -
- 杀死
tail
十六进制转储之前的行objdump
- 删除
cut
十六进制转储的 ASCII 部分 xxd -r
un-hexdumps(十六进制转为二进制)