0

我已经用命令创建了 cpio.gz: cat a.cpio.gz b.cpio.gz > c.cpio.gz

现在我想将这个 c.cpio.gz 文件提取到 b.cpio.gz 和 a.cpio.gz。我怎样才能做到这一点?

4

1 回答 1

0

好的,我有 2 个.gz文件,a.txt.gz并且b.txt.gz. 然后:

$ cat a.txt.gz b.txt.gz > c.txt.gz
$ hexdump -C c.txt.gz
00000000  1f 8b 08 08 f7 a3 00 59  00 03 61 2e 74 78 74 00  |.......Y..a.txt.|
00000010  4b 2c 4e e1 4a 24 80 01  a9 66 ae 58 24 00 00 00  |K,N.J$...f.X$...|
00000020  1f 8b 08 08 01 a4 00 59  00 03 62 2e 74 78 74 00  |.......Y..b.txt.|
00000030  2b 2c 4f e5 2a 24 0a 73  a5 72 01 00 70 24 d5 0a  |+,O.*$.s.r..p$..|
00000040  2d 00 00 00                                       |-...|

请参阅1f 8b 08从 0x00 和 0x20 开始的那些,它们是.gz文件的 BOF 标记(基于我在 OP 的评论中提到的文章)。现在一些awk:

$ awk '
BEGIN { RS="\x1f\x8b\x08"; ORS="" }  # set the marker to RS
NR==2 { print RS $0 > "a2.txt.gz" }  # output the marker and what's after first marker
NR==3 { print RS $0 > "b2.txt.gz" }  # output the marker and what's after the second
' c.txt.gz

生成 2 个文件,根据我的diff,它们与原始文件相同。

于 2017-04-26T14:02:23.353 回答