কোনও ফাইলকে পছন্দসই আকারে প্যাড করবেন কীভাবে?


15

আমার কাছে এমন একটি ফাইল রয়েছে যা আমি 16 মাইবি (16777216 বাইট) না পৌঁছানো পর্যন্ত প্যাড করতে চাই। বর্তমানে এটি 16515072 বাইট। পার্থক্যটি 262144 বাইট।

আমি কীভাবে প্যাড করব?

এটি কাজ করছে বলে মনে হচ্ছে না:

cp smallfile.img largerfile.img
dd if=/dev/zero of=largerfile.img bs=1 count=262144

2
@terabyte; আপনি কি শারীরিক প্যাডিং বা লজিক্যাল প্যাডিং চান? অন্য কথায়; ফাইলটি কি কেবল 16777216 (এবং এতে ছিদ্র থাকতে পারে) আকার দেখাতে পারে বা এটি ডিস্কের পরিমাণ পরিমাণ সঞ্চয় করতে পারে? - BTW, একটি নির্বাচন bs=1মধ্যে ddআমার অভিজ্ঞতা খুব রানটাইম ব্যয়বহুল।
জানিস

5
truncate -s 16M thefile
frostschutz

4
@ ফ্রসচুটজ যে একটি ভাল উত্তর হতে চাইবেন, আপনি কি উত্তর হিসাবে পোস্ট করেছিলেন?
ডারোবার্ট

@ডারবার্ট, স্ট্যাকএক্সচেঞ্জ সাইটের ব্যবহারকারীরা আইনত, সাধারণ উত্তরকে মন্তব্য হিসাবে পোস্ট করছেন?
ব্যবহারকারী 1717828

@ ব্যবহারকারী 1717828 নিশ্চিত নয়, মেটার পক্ষে সম্ভবত একটি ভাল প্রশ্ন।
ডারোবার্ট

উত্তর:


10

of=largerfile.txtফাইলটিতে স্ট্যান্ডআউটটি যুক্ত করুন এবং যুক্ত করুন:

dd if=/dev/zero bs=1 count=262144 >> largerfile.txt

1
seekএখানে একটি সঠিক বিকল্প।
ইন্ড্রি

15

শারীরিক প্যাডিংয়ের উত্তরের পাশাপাশি আপনি ফাইলের বেশিরভাগ প্যাডিং স্পেসটি খালি ("ছিদ্র") রেখে দিতে পারেন, seekফাইলটির নতুন প্রান্তে যুক্ত হয়ে এবং একটি একক অক্ষর লিখে:

dd if=/dev/zero of=largerfile.txt bs=1 count=1 seek=16777215

(যার আরও অনেক বেশি পারফরম্যান্ট হওয়ার সুবিধা রয়েছে, বিশেষত bs=1এটির সাথে এবং অতিরিক্ত পরিমাণে ডিস্কের জায়গাও দখল করে না)।

এই পদ্ধতিটি ব্যবহার করে if=/dev/nullএবং চূড়ান্ত পছন্দসই ফাইলের আকার দ্বারা কোনও অক্ষর যুক্ত না করেও কাজ করে বলে মনে হচ্ছে :

dd if=/dev/null of=largerfile.txt bs=1 count=1 seek=16777216

শারীরিক প্যাডিং সমাধানের একটি পারফরম্যান্ট বৈকল্পিক যা বৃহত্তর ব্লক-মাপ ব্যবহার করে:

padding=262144 bs=32768 nblocks=$((padding/bs)) rest=$((padding%bs))
{
  dd if=/dev/zero bs=$bs count=$nblocks
  dd if=/dev/zero bs=$rest count=1
} 2>/dev/null >>largerfile.txt

3
সঠিক। এই ক্ষেত্রে truncate -s +262144 largerfile.txtএছাড়াও দ্রুত হবে।
don_crissti

4

এখানে সেরা অ্যা্যানসার হ'ল জ্যানিসের (উপরে) কারণ এটি আপনাকে কোনও ফাইল গণনা ছাড়াই পছন্দসই আকারের বর্তমান ফাইলের আকার এবং প্যাড সম্পর্কে ভুলে যেতে দেয়।

এটি স্পার্স ফাইলগুলিরও সুবিধা গ্রহণ করে, যা অ্যাপ্লিকেশন / ডেভ / শূন্য নয়।

উত্তরটি যদিও আরও পরিপাটি হতে পারে, কারণ 'গণনা' 0 করার অনুমতি দেওয়া হয় এবং আপনি এখনও প্যাডিং পান:

dd if=/dev/null of=largerfile.txt bs=1 count=0 seek=16777216

(সম্পাদনা করুন: এটি জিএনইউ ডিডির জন্য সঠিক, তবে এর আচরণ count=0প্ল্যাটফর্ম-নির্দিষ্ট, মন্তব্য দেখুন)


আপনি ভুল করেছেন: count=0অনির্ধারিত, তবে সাধারণত কোনও countপ্যারামিটার নির্দিষ্ট না হওয়ার মতোই । আরও সমস্যা: ddফাইলটি 16777216 বাইটে ছাঁটাই করে, তবে আপনি যদি আশা করেন যে এটি শেষের দিকে একটি গর্ত তৈরি করে, আপনি ভুল হয়ে যাবেন কারণ আপনাকে প্রথমে গর্তের পরে ডেটা লিখতে হবে এবং পরে কোনও আকারে এটি কোনও আকারে কেটে ফেলতে হবে would ।
চৌকস

গণনা = 0 কোনও গণনা প্যারামিটার নির্দিষ্ট করার মতো নয়। আপনি কি যে dd if=/dev/zero of=somefileএকই হিসাবে বলছেন dd if=/dev/zero of=somefile count=0? চেষ্টা করে দেখুন
পিটসি

অবশ্যই! count=0 হয় যেন আপনি সব সময়ে একটি গণনা পরামিতি উল্লেখ করা হয়নি একই। মূল উত্স থেকে প্রাপ্ত সমস্ত প্রয়োগের ক্ষেত্রে এটি কমপক্ষে সত্য। এটি ব্যবহার করে দেখুন, মনে হয় আপনি কখনই মূল ddকমান্ড দিয়ে কাজ করেন নি ।
সহজেই

count'এই পরামিতিটি উপেক্ষা করুন' এর অর্থের জন্য 0টিকে একটি অনন্য মান হিসাবে নির্দিষ্ট করে এমন কোনও ডকুমেন্টেশন আমি পাই না । আপনি কিছু খুঁজে পেতে পারেন? এই জাতীয় দলিল ছাড়াই count=0'জিরো ব্লকগুলি লিখুন' এবং এর থেকে কোনও বিচ্যুতি হ'ল একটি বাগ ... (মূল উত্স বা না)।
পিটসি

1
অপ্রকাশিত পাঠ্য সংশোধন করা হয়েছিল মে 2015 এর আগে থেকে এটি পসিক্স ডকুমেন্টেশন।
সহজেই

1

আপনার কি ব্যবহার করতে হবে dd? আপনি যদি কোনও ফাইলের একটি নির্দিষ্ট (যৌক্তিক) দৈর্ঘ্য চান তবে কেবল আপনি যে অবস্থানটি চান তার একটি শূন্য লিখুন। আগের প্রান্ত এবং লিখিত বাইটের মধ্যে বাইটগুলি নাল বাইট হিসাবে প্রদর্শিত হবে। পার্ল ব্যবহার করে এখানে একটি উদাহরণ।

$ echo Hello > file
$ ls -l file
-rw-r--r-- 1 user group 6 Apr 16 22:59 file
$ perl -le 'open(my $f,"+<","file"); seek($f, 16777216 - 2, 0); print $f "\0"'
$ ls -ln file
-rw-r--r-- 1 user group 16777216 Apr 16 22:59 file

লাইনে "- 2" কেন? স্ক্রিপ্টটি একটি বাইট লিখবে, সুতরাং আমরা সেই বাইটের আগে অবস্থানটি খুঁজতে 1 টি বিয়োগ করি। আমরা অন্যটি বন্ধ করি কারণ সন্ধানের অবস্থানটি শূন্য-সূচকযুক্ত।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.