Câu trả lời:
Theo tôi biết không có cách nào để nói dd
với pad sử dụng 0xFF
. Nhưng có một cách giải quyết.
Đầu tiên tạo một tệp có độ dài cần thiết được điền vào 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
được sử dụng để thay thế số không bằng 0xFF
. tr
mong đợi các đối số trong bát phân. 0xFF
trong bát phân là \377
.
Kết quả:
$ hexdump -C paddedFile.bin
00000000 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
*
00019000
Sau đó chèn tệp đầu vào vào đầu tệp "đệm":
$ 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
Lưu ý conv=notrunc
rằng thông dd
báo không cắt bớt tệp đầu ra.
Ví dụ tập tin đầu vào:
$ hexdump -C inputFile.bin
00000000 66 6f 6f 0a 62 61 72 0a |foo.bar.|
00000008
Kết quả:
$ 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
Một cải tiến có thể có trong câu trả lời của lesmana là vận hành trên tệp tại chỗ. Điều này có thể nhanh hơn rất nhiều đối với các tệp đầu vào lớn và cũng sẽ giữ các tệp thưa thớt. Tuy nhiên, trong nhiều tình huống bạn không muốn sửa đổi tệp đầu vào của mình và vì vậy phương pháp này sẽ không phù hợp.
Ví dụ sau đây bắt đầu với một tệp đầu vào lớn, thưa thớt và đệm nó lên tới kích thước 1GB với các ký tự FF. Đơn giản chỉ cần thay đổi newsize
giá trị mong muốn của bạn. Như bạn có thể thấy, dd
phần này chỉ mất một phần của giây mặc dù tệp này rất lớn.
$ ls -ld inputFile.bin
-rw-rw-r-- 1 … 1073741700 … inputFile.bin
$ hexdump inputFile.bin
0000000 0000 0000 0000 0000 0000 0000 0000 0000
*
3fffff80 0000 0000
3fffff84
$ newsize=$((1024 * 1024 * 1024))
$ filesize=$(stat -c "%s" inputFile.bin)
$ padcount=$((newsize - filesize))
$ dd if=/dev/zero ibs=1 count="$padcount" | tr "\000" "\377" >> inputFile.bin
124+0 records in
0+1 records out
124 bytes (124 B) copied, 0.000162309 s, 764 kB/s
$ ls -ld inputFile.bin
-rw-rw-r-- 1 … 1073741824 … inputFile.bin
$ hexdump inputFile.bin
0000000 0000 0000 0000 0000 0000 0000 0000 0000
*
3fffff80 0000 0000 ffff ffff ffff ffff ffff ffff
3fffff90 ffff ffff ffff ffff ffff ffff ffff ffff
*
40000000
paddedFile.bin
được điềnc3 bf
. Tôi tự hỏi tại sao? chỉnh sửa: superuser.com/questions/1349494/ từ