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

标签 linux perl file split binary

我想将一个二进制文件拆分为多个子文件,这些子文件以前缀后跟小数偏移量命名,例如 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/

相关文章:

perl - 全局符号 "$variable"需要在 filename.pl 中显式包名称

C编程: Struct array construction while reading a file

c++ - 在 C++ 中确定 getline() 起点

linux - Linux环境下使用Selenium验证对话框

linux - 将文件复制到远程服务器,但位于属于其他用户的目录中?

mysql - Debian Ruby 安装路径

perl - 我可以使用此处的文档附加到字符串吗?

c - vim 编辑器是否有任何实用程序/插件可以添加评论/标题?

bash - Perl 将参数从 Bash 传递到文件中

java - Inno Setup Compiler - JavaFX 应用程序不写入文件