用0xff填充拆分二进制文件

时间:2014-06-23 14:22:52

标签: linux perl file split binary

我想将二进制文件拆分为以前缀后跟小写偏移量命名的子文件,如prefix-3200.bin, prefix-3201.bin

我发现我可以用

分割我的文件
split -b128k -d input.bin

生成名为x00,x01,x02,...

的文件

不幸的是我仍然需要翻译块名称并用​​0xff填充最后一个块,因为我的所有块都应该具有相同的128kB大小。

我正在考虑使用Perl来完成这项工作,但如果我只能使用标准的GNU工具会更好。

如何轻松地重命名和填充我的最后一个二进制块?

我试着用dd:

dd if=/dev/zero ibs=1k count=128 | tr "\000" "\377" > block
dd if=block of=block conv=notrunc

修改:

我现在可以使用

生成正确的prefix-XXXX
split -b128k -d -a4 input.bin prefix-

2 个答案:

答案 0 :(得分:1)

进行GNU拆分后,您可以使用以下split命令:

split -b128k --additional-suffix=".bin" -a4 --numeric-suffixes=3200 INPUT_FILE "prefix-"

但是,您需要事后用0xFF显式填充最后一个文件。您可以使用dd,如here

所述

答案 1 :(得分:1)

my $block_size = 128*1024;

open(my $fh_in, '<:raw', 'input.bin') or die $!;

local $/ = \$block_size;
my $counter = 0;
while (<$fh_in>) {
   open(my $fh_out, '>:raw', sprintf("prefix-%04d.bin", $counter++)) or die $!;
   $_ = substr($_.("\xFF" x $block_size), 0, $block_size);
   print($fh_out $_);
}