我想将一个二进制文件拆分为多个子文件,这些子文件以前缀后跟小数偏移量命名,例如 prefix-3200.bin、prefix-3201.bin
。
我发现我可以用
分割我的文件split -b128k -d input.bin
生成名为 x00、x01、x02、...的文件
不幸的是,我仍然需要翻译 block 名称并用 0xff 填充最后一个 block ,因为我所有的 block 都应该具有相同的 128kB 大小。
我正在考虑使用 Perl 来完成这项工作,但如果我只能使用标准的 GNU 工具会更好。
如何轻松重命名和填充我最后的二进制 block ?
我尝试将 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-
最佳答案
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 $_);
}
关于linux - 用 0xff 填充拆分二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24368392/