RPMパッケージからファイルを取り出す

RPMパッケージの中から1つのファイルだけが欲しい!と言う事が(滅多に無いが極たまに)ある。そんな時はこの方法。
RPMパッケージはcpio形式で圧縮されているファイルのようだ。cpioファイルに変換してしまえば後は思うがまま。

[worker@CentOS-5.2 ~]$ rpm2cpio postgresql-server-8.1.11-1.el5_1.1.i386.rpm > postgresql-server-8.1.11-1.el5_1.1.i386.cpio

だが、cpioファイルにするまでもなく『|』を使う方法もある。

[worker@CentOS-5.2 ~]$ rpm2cpio postgresql-server-8.1.11-1.el5_1.1.i386.rpm | cpio --list
 :

これで該当RPMパッケージにどんなファイルが同梱されているかがわかる。これは下記コマンドと同等か。

[worker@CentOS-5.2 ~]$ rpm -qlp postgresql-server-8.1.11-1.el5_1.1.i386.rpm 

取り出したいファイル名がわかればあとは簡単。
もっと簡単な方法があるのかもしれないけど、cpioコマンドをほとんど使わない自分はここまでしかわからなかった。

[worker@CentOS-5.2 ~]$ rpm2cpio postgresql-server-8.1.11-1.el5_1.1.i386.rpm  | cpio -id '*postgresql'

これで『postgresql』で終わっているファイル(パス含む)が解凍される。

改善できればなぁというのが下記の内容

  • 正規表現でひっかかるもの全てがcpioファイルから取り出される。
  • ディレクトリ構造を持ったまま取り出される。

上記2点を改善できるcpioコマンドマスターのかた教えてください♪