কমান্ড লাইন থেকে আমি কীভাবে একটি নির্দিষ্ট আকারের একটি ফাইল তৈরি করতে পারি?


125

আমি কীভাবে একটি ফাইল তৈরি করতে পারি (উদাহরণস্বরূপ touchকমান্ড বা অন্য কোনও অনুরূপ পদ্ধতি ব্যবহার করে ) তবে একটি নির্দিষ্ট আকার (উদাহরণস্বরূপ 14 এমবি) দিয়ে?

ব্যবহারের ক্ষেত্রে বিভিন্ন ফাইলের আকারের সাথে এফটিপি পরীক্ষা করা। আমরা যদি একটি নির্দিষ্ট আকারের সাথে একটি ফাইল তৈরি করতে পারি, তবে এটি এফটিপি স্থানান্তর ইত্যাদি যাচাই করতে কার্যকর হবে


9
সম্পর্কিত তাই প্রশ্ন: stackoverflow.com/questions/257844/...
ডের Hochstapler

উত্তর:


158

ব্যবহার truncate:

truncate -s 14M filename

থেকে man truncate:

DESCRIPTION
   Shrink or extend the size of each FILE to the specified size

[...]

 -s, --size=SIZE
          set or adjust the file size by SIZE

দ্রষ্টব্য: truncateআপনার সিস্টেমে উপলব্ধ নাও হতে পারে, যেমন ম্যাক ওএস এক্সে এটি ডিফল্টরূপে ইনস্টল করা হয়নি (তবে উদাহরণস্বরূপ ম্যাকপোর্টগুলি ব্যবহার করে আপনি সহজেই এটি ইনস্টল করতে পারেন)। এই ক্ষেত্রে আপনার ব্যবহার ddবা headতার পরিবর্তে প্রয়োজন হতে পারে ।


2
কি দারুন. খুব সুন্দর, আমি এটা জানতাম না।
n611x007

মানুষ এটি সব বলছে: অগ্রভাগ ছাঁটিয়া - সঙ্কুচিত অথবা নির্দিষ্ট মাপ একটি ফাইলের আকার প্রসারিত
ssedano

12
সত্যিই খুব সুন্দর. touchপ্রয়োজন যদিও, আপনি কেবল চালাতে পারেন না হয় truncate -s 14M filenameএটা তৈরি করবে filenameসরাসরি।
টেরডন

শীতল ... এটি আমি ঠিক তাই চেয়েছিলাম ... ধন্যবাদ @
অলিভার

34
এটি দেখে মনে হচ্ছে এটি একটি বিচ্ছিন্ন ফাইল তৈরি করে , যেখানে নীচের উত্তরগুলি (যা "ডিডি" ব্যবহার করে) তা দেয় না। পার্থক্যটি আপনার পক্ষে গুরুত্বপূর্ণ কিনা তা আমি জানি না, তবে আমি বুঝতে পেরেছিলাম আমি এটি উল্লেখ করব
অফবি 1

100

সম্পাদনা: সহজতম উপায়টি সম্ভবত truncateআশুতোষ বিশ্ববন্ধুর জবাব , তবে @ অফবি 1 দ্বারা নির্দেশিত যেগুলি স্পার্স ফাইল তৈরি করে যা আপনি চান না। নীচের সমাধানগুলি সাধারণ, সম্পূর্ণ ফাইল তৈরি করে।


নিম্নলিখিত আদেশগুলি একটি 14MB ফাইল তৈরি করে foo:

  1. fallocate( @ ব্রাথথ্রুকে ধন্যবাদ যারা মন্তব্যগুলিতে এটিকে পরামর্শ দিয়েছেন এবং নীচে আহমেদ মাসুদের জবাবটি দিয়েছেন যাতে এর উল্লেখ রয়েছে।)

    fallocate -l 14000000 foo
    

    এই কমান্ডটি বিশেষভাবে চিত্তাকর্ষক, কারণ এটি truncateপ্রয়োজনীয় ফাইল আকারের (তাত্ক্ষণিক) তত দ্রুত (বৃহত্তর ফাইলগুলির জন্য ধীর হবে এমন অন্যান্য সমাধানগুলির বিপরীতে) এবং এখনও সাধারণ ফাইল তৈরি করে, বিরল নয়:

    $ truncate -s 14MB foo1.txt 
    $ fallocate -l 14000000 foo2.txt 
    $ ls -ls foo?.txt 
        0 -rw-r--r-- 1 terdon terdon 14000000 Jun 21 03:54 foo1.txt
    13672 -rw-r--r-- 1 terdon terdon 14000000 Jun 21 03:55 foo2.txt
    
  2. এলোমেলো তথ্য দিয়ে একটি ফাইল তৈরি করুন

    dd if=/dev/urandom of=foo bs=14MB count=1
    

                                                                              অথবা

    head -c 14MB /dev/urandom > foo
    
  3. \0এর দ্বারা ভরা একটি ফাইল তৈরি করুন :

    dd if=/dev/zero of=foo.txt bs=14MB count=1
    

                                                                              অথবা

    head -c 14MB /dev/zero > foo
    
  4. অন্য একটি ফাইলের প্রথম 14 এমবি ডেটা দিয়ে পূর্ণ একটি ফাইল তৈরি করুন:

    head -c 14MB bar.txt > foo
    
  5. অন্য একটি ফাইলের সর্বশেষ 14MB ডেটা ভরা একটি ফাইল তৈরি করুন:

    tail -c 14MB bar.txt > foo
    

উপরের সমস্ত উদাহরণে, ফাইলটি 14*1000*1000আপনি চাইলে 14*1024*1024এটির MBসাথে প্রতিস্থাপন করুন M। উদাহরণ স্বরূপ:

dd if=/dev/urandom of=foo bs=14M count=1
head -c 14M /dev/zero > foo

fallocate কেবলমাত্র বাইটে ডিল করে, তাই আপনাকে করতে হবে (14 * 1024 * 1024 = 14680064)

fallocate -l 14680064 foo

2
ধন্যবাদ ... এটি পছন্দসই আকারের একটি ফাইল তৈরি করার আমার উদ্দেশ্যটিও পূরণ করবে ...
ফ্যাসিল

2
আমি ddযদি এর চেয়ে সহজ, কম সম্ভাব্য-ধ্বংসাত্মক পদ্ধতির ব্যবহারের বিরুদ্ধে পরামর্শ দিই।
অ্যাকোলিট

3
@ একলাইটে আমিও চাই That's এই কারণেই প্রতিটি ddসমাধানের একটি নন-ডিডি বিকল্প রয়েছে।
টেরডন

1
উইকি এন্ট্রি বলে যে ডিডি এমনকি শূন্যের চেয়েও একটি স্পার ফাইল তৈরি করবে, তাই না? en.wikedia.org/wiki/Sparse_file
মাইকেল

1
@ মিশেল আমি যাচাই করেছিলাম, তা নিশ্চিত হওয়ার জন্য, এবং আমার কমান্ডগুলির মধ্যে কোনও কমই স্পার ফাইল তৈরি করে। ddউইকি পৃষ্ঠাতে কমান্ড সম্পূর্ণ ভিন্ন এবং ব্যবহার করে না /dev/zero। আরও যুক্তিযুক্ত Mবা না তা হিসাবে MB, এটি বিকাশকারীদের সাথে গ্রহণ করুন। মাথা , লেজ এবং ডিডি এর ম্যান পৃষ্ঠাগুলি সমস্ত পরিষ্কারভাবে জানিয়েছে যে "এমবি = 1000 * 1000, এম = 1024 * 1024"। এটি অন্যান্য * নিক্সে পৃথক হতে পারে।
টেরডন

21
dd bs=1MB count=14 if=/dev/zero of=<yourfilename>

সতর্কতা আপনার স্বেচ্ছায় বা দুর্ঘটনাক্রমে নির্দিষ্ট করে থাকলে, আপনার কাছে লেখার অধিকার রয়েছে এমন যে কোনও কিছুdd নিঃশব্দে ওভাররাইট করে দেবে। নিশ্চিত হয়ে নিন যে আপনি বুঝতে পেরেছেন , যেমন। পড়ার সঙ্গে , এবং আপনি আপনার dd কমান্ডের লাইন স্ক্রু আপ না বা অন্য আপনি সহজেই অপরিবর্তনীয় ডেটা হারিয়ে তৈরি করতে পারেন - মোট এমনকিdddd --help

শুরু করার জন্য if=হয় ইনপুট ফাইল এবং of=হয় আউটপুট ফাইল । কমান্ড চালানোর আগে সর্বদা ডাবল পরীক্ষা করে দেখুন যে আপনি এটি ঠিক পেয়েছেন। :)


13

ম্যাজিক ব্যবহার করুন dd;) ম্যান পৃষ্ঠা

$ dd if=/dev/zero of=output.dat  bs=1024  count=14336

14 এমবি * 1024 = 14336 কেবি, বা:

$ dd if=/dev/zero of=output.dat  bs=1MB  count=14

এবং আপনি 14 এমবি আউটপুট.ড্যাট ফাইল পাবেন, জিরো দিয়ে ভরা: ডি


8

এটি করার দ্রুততম উপায় এটি হওয়া উচিত:

SEEK=$SIZE-1
dd if=/dev/zero of=outfile bs=1 seek=$SEEK count=1 

অন্যথায় কেবল একটি দ্রুত এবং নোংরা সি বা পার্ল প্রোগ্রাম লিখুন যা সঠিক অবস্থানের সন্ধান করে এবং একটি একক বাইট লিখে। এটি আসলে ব্লকগুলিতে ডেটা ফেলার চেয়ে অনেক বেশি দ্রুত।

আপনি sparse ফাইল এড়াতে চান তাহলে লিনাক্স (এবং সম্ভবত অন্যান্য সিস্টেমের) এ আপনি ব্যবহার করতে পারেন fallocate -l <length>থেকে util-linux

যদি এটি অনুপলব্ধ থাকে এবং আপনার একটি পসিক্স কমপ্লায়েন্ট সিস্টেম থাকে তবে আপনি পিক্সিক্স_ফালোক্ট () লাইব্রেরি কল ব্যবহার করে একটি দ্রুত এবং নোংরা প্রোগ্রাম লিখতে পারেন। পিক্স_ফালোকট নির্দিষ্ট রেঞ্জের বরাদ্দের গ্যারান্টি দেয় যাতে আপনি যদি পরবর্তী সময়ে ব্যাপ্তিতে সফলভাবে ফিরে আসে তবে ডিস্ক-ফুল পাবেন না


6

যদিও ddএটা করতে পোর্টেবল পথ, কমান্ড হয় mkfileএবং xfs_mkfileএই কাজের জন্য বিশেষভাবে লেখা এবং দ্রুত করা হয়:

mkfile size[b|k|m|g] filename
xfs_mkfile size[b|k|m|g] filename

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

ডিফল্টরূপে তারা শূন্য-পূর্ণ ফাইল তৈরি করে এবং স্পার্স (বা "হোলি") ফাইল তৈরি করে না । তারা উভয় -nপরিবর্তে স্পার্স ফাইল তৈরি করার বিকল্প গ্রহণ করে ।


1

পার্লের সাথে আরও একটি বিকল্প রয়েছে:

perl -e 'print "a" x 1024' > file.txt

এটি 1KB ফাইল তৈরি করবে। আপনার পছন্দ মতো যে কোনও সংখ্যার সাথে 1024 প্রতিস্থাপন করুন।

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