কিভাবে ডিডি ব্যবহার করে একটি ফাইল এফএফ দিয়ে প্যাড করবেন?


20

কিভাবে 0xFFব্যবহার করে একটি ফাইল প্যাড dd?

এই কমান্ডটি আউটপুট ফাইলটিকে জিরো দিয়ে প্যাড করবে যতক্ষণ না ফাইলের আকার 100 কেবি পৌঁছায়:

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

তবে আমি 0xFFs এর পরিবর্তে একটি ফাইল প্যাড করতে চাই 0x00

উত্তর:


29

আমি যতদূর জানি 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

2
পদক্ষেপ 1 লিনাক্সে কাজ করে তবে ওক্সে ফাইলটি paddedFile.binপূর্ণ হয় c3 bf। আমি ভাবছি কেন? সম্পাদনা করুন: superuser.com/questions/1349494/…
সেনেসো

1

লেসমানার উত্তরের একটি সম্ভাব্য উন্নতি হ'ল জায়গাটিতে থাকা ফাইলটি পরিচালনা করা। বৃহত ইনপুট ফাইলগুলির জন্য এটি অনেক দ্রুত হতে পারে এবং স্পার্স ফাইলগুলিকে খুব কম রাখবে। তবে, অনেক পরিস্থিতিতে আপনি নিজের ইনপুট ফাইলটি সংশোধন করতে চান না এবং তাই এই পদ্ধতিটি অনুপযুক্ত।

নিম্নলিখিত উদাহরণটি একটি বৃহত, স্পার্স ইনপুট ফাইল দিয়ে শুরু হয় এবং এফএফ অক্ষরের সাথে এটি 1 জিবি আকার পর্যন্ত প্যাড করে। কেবল 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
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.