Dd का उपयोग करके "FF" के साथ फाइल को कैसे पैड करें


20

किसी फ़ाइल को पैड के साथ कैसे करें 0xFF का उपयोग करते हुए dd?

जब तक फ़ाइल का आकार 100 KB तक नहीं हो जाता है, यह कमांड आउटपुट फाइल को zeroes के साथ पैड कर देगा:

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

हालाँकि, मैं एक फ़ाइल के साथ पैड करना चाहता हूं 0xFF के बजाय है 0x00 रों।

जवाबों:


27

जहां तक ​​मुझे पता है कि बताने का कोई तरीका नहीं है dd पैड का उपयोग करने के लिए 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 का उपयोग जीरो को बदलने के लिए किया जाता है 0xFFtr अष्टक में तर्क की अपेक्षा करता है। 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

1
चरण 1 लिनक्स पर काम करता है, लेकिन फ़ाइल को ओएक्सएक्स में paddedFile.bin से भर जाता है c3 bf। मुझे आश्चर्य है क्योंकि? संपादित करें: superuser.com/questions/1349494/...
Synesso

1

Lesmana के उत्तर पर एक संभावित सुधार फ़ाइल को इन-प्लेस पर संचालित करना है। यह बड़ी इनपुट फ़ाइलों के लिए बहुत तेज़ हो सकता है और विरल फ़ाइलों को भी विरल रखेगा। हालाँकि, कई स्थितियों में आप अपनी इनपुट फ़ाइल को संशोधित नहीं करना चाहते हैं, और इसलिए यह विधि अनुपयुक्त होगी।

निम्न उदाहरण एक बड़ी, विरल इनपुट फ़ाइल से शुरू होता है और इसे FF चार्ट के साथ 1GB के आकार तक बढ़ाता है। बस बदलते हैं newsize अपने इच्छित मूल्य के लिए। जैसा कि आप देख सकते हैं, dd इस फ़ाइल के बहुत बड़े होने के बावजूद इसका कुछ भाग केवल एक सेकंड का होता है।

$ 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
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.