Я хотел бы разбить двоичный файл на подфайлы с префиксом, за которым следует десятичное смещение, например prefix-3200.bin, prefix-3201.bin.

Я обнаружил, что могу разделить свой файл на

split -b128k -d input.bin

Который генерирует файлы с именами x00, x01, x02, ...

К сожалению, мне все еще нужно перевести имена блоков и заполнить последний блок 0xff, потому что все мои блоки должны иметь одинаковый размер 128 КБ.

Я подумываю использовать 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-
0
nowox 23 Июн 2014 в 18:22

2 ответа

Лучший ответ
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 $_);
}
1
ikegami 23 Июн 2014 в 14:32

После разделения GNU вы можете использовать следующую команду split:

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

Однако после этого вам нужно будет явно заполнить последний файл с помощью 0xFF. Вы можете использовать для этого dd, как описано здесь.

1
Community 20 Мар 2017 в 10:18