Насколько я знаю, нет никакого способа сказать, dd
используя pad 0xFF
. Но есть обходной путь.
Сначала создайте файл необходимой длины, заполненный 0xFF
:
$ dd if=/dev/zero ibs=1k count=100 | tr "\000" "\377" >paddedFile.bin
100+0 records in
200+0 records out
102400 bytes (102 kB) copied, 0,0114595 s, 8,9 MB/s
tr
используется для замены нулей на 0xFF
. tr
ожидает аргументы в восьмеричном виде. 0xFF
в восьмеричном есть \377
.
Результат:
$ hexdump -C paddedFile.bin
00000000 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
*
00019000
Затем вставьте входной файл в начало «дополненного» файла:
$ dd if=inputFile.bin of=paddedFile.bin conv=notrunc
0+1 records in
0+1 records out
8 bytes (8 B) copied, 7,4311e-05 s, 108 kB/s
Обратите внимание, conv=notrunc
что говорит dd
не обрезать выходной файл.
Пример входного файла:
$ hexdump -C inputFile.bin
00000000 66 6f 6f 0a 62 61 72 0a |foo.bar.|
00000008
Результат:
$ hexdump -C paddedFile.bin
00000000 66 6f 6f 0a 62 61 72 0a ff ff ff ff ff ff ff ff |foo.bar.........|
00000010 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
*
00019000
paddedFile.bin
заполненc3 bf
. Интересно, почему? редактировать: superuser.com/questions/1349494/…Возможное улучшение ответа Лесманы - работать с файлом на месте. Это может быть намного быстрее для больших входных файлов, а также будет поддерживать разреженные файлы разреженными. Однако во многих ситуациях вы не хотите изменять входной файл, и поэтому этот метод будет неподходящим.
Следующий пример начинается с большого разреженного входного файла и дополняет его размером до 1 ГБ с символами FF. Просто измените
newsize
на желаемое значение. Как видите, этаdd
часть занимает всего лишь долю секунды, несмотря на то, что этот файл очень большой.источник