Làm thế nào để đệm một tập tin với FF FF bằng cách sử dụng dd?


20

Làm thế nào để đệm một tập tin với 0xFFviệc sử dụng dd?

Lệnh này sẽ đệm tệp đầu ra với số không cho đến khi kích thước tệp đạt 100 KB:

dd if=inputFile.bin ibs=1k count=100 of=paddedFile.bin conv=sync

Tuy nhiên, tôi muốn đệm một tệp bằng 0xFFs thay vì 0x00s.

Câu trả lời:


29

Theo tôi biết không có cách nào để nói ddvớ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. trmong đợi các đối số trong bát phân. 0xFFtrong 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=notruncrằng thông ddbá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

2
Bước 1 hoạt động trên Linux, nhưng trong osx, tệp paddedFile.binđược điền c3 bf. Tôi tự hỏi tại sao? chỉnh sửa: superuser.com/questions/1349494/ từ
Synesso

1

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 newsizegiá trị mong muốn của bạn. Như bạn có thể thấy, ddphầ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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.