如何从 cpio 存档中提取单个文件?

如何从 cpio 存档中提取单个文件?

我有一个包含大量文件的 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 -run-hexdumps(十六进制转为二进制)

相关内容