web-dev-qa-db-ja.com

連結されたcpioアーカイブを抽出する方法は?

% find a/ | cpio -o | gzip -c > alpha.gz
% find b/ | cpio -o | gzip -c > bravo.gz
% cat alpha.gz beta.gz > charlie.gz
% gunzip charlie.gz

これで、ファイルcharlieが取得されます。これは、連結されたcpioアーカイブである必要があります。だが cpio -id < charlie a /のコンテンツのみを抽出します。どうすればb /を取得できますか?

追加:チャーリーのサイズはアルファとブラボーの合計に等しくなります。そして、egrepのいくつかのキーワードは、チャーリーが確かにブラボーのデータを含んでいることを示しました。

4
Magicloud

'alpha'および 'bravo'アーカイブには、cpioに完了したことを通知するアーカイブ終了マーカーが個別に含まれています。アーカイブは終了しますが、テープは続行される可能性があるため、これはテープから読み取るときに役立ちます。

したがって、テープから読み取るのと同じように、同じ位置から別のcpio実行を開始する必要があります。一般的に言えば、cpioアーカイブしかないことはわかっているが、いくつあるか完全にはわからないためです。(while cpio -id ; do :; done) < charlieは、cpioエラー(eofに達したときの「アーカイブの早期終了」)まで問題なく実行を続けます。

3
Gabe