cpioアーカイブから個々のファイルを抽出する方法は?

cpioアーカイブから個々のファイルを抽出する方法は?

多くのファイルを含むcpioアーカイブがありますが、ファイル全体ではなく1つのファイルのみを抽出できます。tarただ使用することができますが、動作しませtar -xf archive.tar path/to/filecpio

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  -
  • 16進tailダンプ前のライン終了objdump
  • cut16進ダンプのASCII部分の除去
  • xxd -run-hexdumps(16進数を2進数に)

関連情報