কীভাবে ইউনিক্সে একটি বৃহত ফাইল তৈরি করবেন?


17

উইন্ডোজ এ জাতীয় জিনিস করার একটি উপায় খুঁজে পেয়েছি

echo "This is just a sample line appended  to create a big file. " > dummy.txt
for /L %i in (1,1,21) do type dummy.txt >> dummy.txt

http://www.windows-commandline.com/how-to-create-large-dummy-file/

ইউনিক্সে কোনও ফাইল অনুলিপি করা, সংযোজন এবং তারপরে প্রক্রিয়াটি পুনরাবৃত্তি করার কোনও উপায় আছে? এরকম কিছু for .. cat file1.txt > file1.txt?


শুধু সংযোজনের পরিবর্তে ফাইলটি এবং অনুলিপি কেন অনুলিপি করবেন?
123

@ 123 এপেনড ভাল, তবে কীভাবে লুপ করবেন?
টমাস লি

4
for i in {1..1000000};do echo "string" >> file;doneব্যাশে
123

9
এটি একটি পাঠ্য ফাইল হতে হবে? আপনি / dev / শূন্য বা / দেব / ইউরানডম থেকে যে কোনও আকারের ফাইল তৈরি করতে পারেন।
রিয়েলসেকটিক

2
আমি type file >> fileঅসীম লুপটি চালানোর আশা করব (কমপক্ষে যত তাড়াতাড়ি এটি যথেষ্ট পরিমাণে বড় হবে যে এটি কোনও বাফারের সাথে ফিট করে না)।
স্টাফেন চেজেলাস

উত্তর:


29
yes "Some text" | head -n 100000 > large-file

সাথে csh/ tcsh:

repeat 10000 echo some test > large-file

সাথে zsh:

{repeat 10000 echo some test} > large-file

জিএনইউ সিস্টেমে, আরও দেখুন:

seq 100000 > large-file

বা:

truncate -s 10T large-file

(একটি 10 ​​টিআইবি স্পার্স ফাইল তৈরি করে (খুব বড় তবে ডিস্কে কোনও স্থান নেয় না)) এবং অন্যান্য বিকল্পগুলি "প্রচুর শূন্য বাইট সহ একটি পরীক্ষা ফাইল তৈরি করুন" এ আলোচিত ।


এরকম cat file >> fileএকটি খারাপ ধারণা হবে।

প্রথমত, এটি এমন কিছু catবাস্তবায়ন নিয়ে কাজ করে না যা তাদের আউটপুট ফাইলের মতো ফাইলগুলি পড়তে অস্বীকার করে। এমনকি আপনি যদি এটির চারপাশে কাজ করে এমনকি যদি এটি অভ্যন্তরীণ বাফারের চেয়ে বড় হয় cat file | cat >> fileতবে fileএটি একটি অসীম লুপে চালিত catহতে পারে কারণ catএটি আগে লেখা ডেটা পড়া শেষ করে।

একটি রোটেশনাল হার্ড ড্রাইভ দ্বারা সমর্থিত ফাইল সিস্টেমগুলিতে, এটি বেশ অকার্যকরও হবে (সম্ভবত মেমরির চেয়ে বেশি আকারে পৌঁছানোর পরে) ড্রাইভটি সেই স্থানের মধ্যে যেখানে আগে ডেটা পড়তে হবে তার মাঝখানে যেতে হবে, এবং এটি যেখানে এটি লিখতে হবে।


19
বা dd if=/dev/zero of=large-file bs=1024 count=1024একটি 1 এমবি ফাইলের জন্য
ডালাল 24

7
@ ডগও'নেল আমি আরও dd if=/dev/zero of=test bs=1M count=1পরিষ্কার হতে দেখি।
123


1
অথবা আপনি যদি এলোমেলো ডেটা চান তবে / ডিভ / শূন্যের পরিবর্তে / dev / urandom ব্যবহার করুন।
ব্যবহারকারী 253751

3
@ রবার্টটোমস হ্যাঁ, প্রত্যেকে ব্যবহার করে ddতবে কেন তা আমি কখনই বুঝতে পারি নি। প্রকৃতপক্ষে, আমি মনে করি আমি কেবল কখনও এটি এমবিআর বা অনুরূপ ফ্রঞ্জ কাজগুলি পড়তে ব্যবহার করেছি। আমার অভিজ্ঞতায়, অন্যান্য সরঞ্জামগুলি যেখানে লোকেরা ব্যবহার করেন, তার বেশিরভাগ ক্ষেত্রেই দ্রুত, সহজ এবং নিরাপদ dd। আমি মনে করি এটি সেইসব ক্ষেত্রে একটি যেখানে সাধারণ! = অনুকূল, পছন্দ sudo suবা cat file | grep foo
টারডন

22

আপনি সোলারিসে এটি ব্যবহার করে একটি বড় ফাইল তৈরি করতে পারেন:

mkfile 10g /path/to/file

সোলারিসে (এবং লিনাক্স) কাজ করে এমন আরেকটি উপায়:

truncate -s 10g /path/to file

এটি ব্যবহার করাও সম্ভব:

dd if=/dev/zero of=/path/to/file bs=1048576 count=10240

ডিডি একটি টেরাবাইটের মতো
123

1
"একটি বৃহত ফাইল" সংজ্ঞায়িত করুন :-) তবে আমি অন্যান্য নমুনাগুলি থেকে সমস্ত রাজ্যের 10 গ্রাম সম্পাদনা করেছি ...
ল্যামবার্ট

কাটা কাটা 'কাটা' চালানো যায় না। এই জাতীয় কোনও ফাইল বা ডিরেক্টরি কাটাকে কেবল লিনাক্স বলে মনে হয় না।
স্কিলি

truncateসোলারিস 11.2+ উপস্থিত নেই
ল্যাম্বার্ট

11

লিনাক্স সিস্টেমে একটি বৃহত ফাইল তৈরির দ্রুততম উপায় হ'ল fallocate:

sudo fallocate -l 2G bigfile

fallocateফাইল সিস্টেমে ম্যানিপুলেট করে এবং প্রকৃতপক্ষে ডেটা সেক্টরে ডিফল্টরূপে লেখেন না এবং এটি অত্যন্ত দ্রুত is খারাপ দিকটি এটি মূল হিসাবে চালাতে হবে।

এটি ক্রমাগত একটি লুপে চালানো, আপনি সেকেন্ডের ব্যবধানে বৃহত্তম ফাইল সিস্টেমগুলি পূরণ করতে পারেন।

থেকে man fallocate

ফ্যালোকট কোনও ফাইলের জন্য বরাদ্দ হওয়া ডিস্কের স্থানটি হ্রাস করতে ব্যবহৃত হয়, তা হয় হ্রাস করা বা প্রিলোকল্ট করতে।
ফ্যালোকট সিস্টেম কলকে সমর্থন করে এমন ফাইল সিস্টেমগুলির জন্য, ব্লকগুলি বরাদ্দ করে এবং সেগুলি অবিচ্ছিন্ন হিসাবে চিহ্নিত করে দ্রুত পূর্বনির্ধারণ করা হয়, ডেটা ব্লকগুলিতে কোনও আইও প্রয়োজন হয় না। এটি জিরো দিয়ে পূরণ করে কোনও ফাইল তৈরির চেয়ে অনেক দ্রুত।
এক্সএফএস (লিনাক্স 2.6.38 সাল থেকে), ext4 (লিনাক্স 3.0 এর পর থেকে), বিটিআরএফস (লিনাক্স ৩. since থেকে) এবং টিএমপিএফ (লিনাক্স ৩.৩ থেকে) সমর্থিত।


1
এটি গ্রহণযোগ্য উত্তর হওয়া উচিত। সহজ এবং দ্রুত।
আরডোচিঘ

8

আপনি CTRL-C না হওয়া পর্যন্ত এটি চলতে থাকবে:

yes This is stuff that I want to put into my file... >> dummy.txt

তবে সাবধান থাকুন, কারণ আপনি কয়েক লক্ষ লাইন / সেকেন্ড পেতে পারেন ...

থেকে man yes:

yes - output a string repeatedly until killed

লিনাক্স পরিবেশে একটি বড় ফাইল তৈরি করার জন্য এটি একটি খুব সহজ পদ্ধতি easy
চামিন্দা বান্দারা

1
yes $BIG_STRING | head -c $TARGET_SIZE >> dummy.txtআপনি সঠিক পরিমাণ পেতে দেয়। (-n $ TARGET_NUMBER_OF_LINES)। লক্ষ্যমাত্রা পৌঁছেছে বলে সমাপ্ত হওয়ার পরে yes'ভাঙা পাইপ' এর ফলস্বরূপ স্বয়ংক্রিয়ভাবে মারা যাবে head
পাইপব্রোস

4

যদি আমি আপনাকে সঠিকভাবে বুঝতে পারি তবে আপনি এমন কিছু সন্ধান করছেন:

echo "test line" > file;
for i in {1..21}; do echo "test line" >> file; done

এটি "পরীক্ষার লাইন" এর 22 পুনরাবৃত্তি সহ একটি ফাইল তৈরি করবে। আপনি যদি কোনও নির্দিষ্ট ফাইলের আকার চান তবে আপনি এটি (লিনাক্সে) ব্যবহার করতে পারেন। 1024 এক কিলোবাইট:

while [ $(stat -c "%s" file) -le 1024 ]; do echo "test line" >> file; done

ব্যক্তিগতভাবে, যখন আমি একটি বড় ফাইল তৈরি করতে চাই তখন আমি দুটি ফাইল এবং বিড়ালটিকে অন্যটিতে ব্যবহার করি। আপনি পছন্দসই আকারে না পৌঁছানো পর্যন্ত প্রক্রিয়াটি পুনরাবৃত্তি করতে পারেন (1MB এখানে):

echo "test line" > file;
while [ $(stat -c "%s" file) -le 1048576 ]; do 
    cat file >> newfile
    cat newfile >> file
done

নোট করুন যে এই সমাধানটি প্রায়শই পছন্দসই আকারের চেয়ে বেশি হয়ে যাবে কারণ যদি ফাইলটি সীমাবদ্ধ থাকে তবে সবকিছুতে এটি আবার ক্যাট করা হবে।

অবশেষে, আপনি যদি যা চান তা হ'ল পছন্দসই আকারের একটি ফাইল এবং আসলে কিছু ধারণ করার প্রয়োজন নেই, আপনি সিএ ব্যবহার করুন truncate:

truncate -s 1M file

1
catফাইলটি ইনগিং করার ফলে কেবল সংযোজন করার কোনও সুবিধা আছে কি ? দেখে মনে হচ্ছে এটি প্রতিটি সময় লুপ দুটি প্রক্রিয়া কাঁটাচামচ করা এবং পুরো বিষয়বস্তু একাধিকবার সরানো হিসাবে এটি বেশি সময় নিতে হবে।
123

1
@ 123 গতি। catপদ্ধতির অনেক, অনেক দ্রুততর। এটি কেবল বিশাল ফাইল তৈরি করার জন্যই বোধগম্য হয় তবে এটি আমার মেশিনে 10 সেকেন্ডের মধ্যে 545 এম ফাইল তৈরি করেছে। একই whileলুপ echo "test line" >> fileএকই সময়ে একই পরিমাণে একটি 96 কে ফাইল তৈরি করেছে।
টেরডন

আমার ধারণা "বিড়াল" পদ্ধতির সাথে জিনিসটি এটি দ্রুত বৃদ্ধি পায়। দ্বিতীয় পুনরাবৃত্তিটি শুরু করার সময়, 'নিউফাইলে' এর মধ্যে ইতিমধ্যে 1 লাইন এবং 'ফাইল' এর 2 টি থাকে এবং এটি করা হয়ে গেলে 'নতুন ফাইল' এখন 3 লাইন এবং 'ফাইল' 5 হয়। এর পরে, 'নতুন ফাইল' 8 এবং ' ফাইলটি হবে 13. পরবর্তী (21, 34), ইত্যাদি
পাইপব্রস

খারাপ দিক: এটি ফাইল তৈরির সময় লক্ষ্যযুক্ত ফাইলের আকারের চেয়ে বেশি ডিস্কের জায়গা (> = 1.5 * কাঙ্ক্ষিত_ আকার) নিতে পারে।
পাইপব্রোস

BTW। আপনার truncateচারপাশে থাকলে, আপনি truncate -s 1Gপ্রথমে ফাইলটি তৈরি করতে পারেন । unix.stackexchange.com/a/269184/85549 । আপনি এটিকে একটি দ্বারা head -c $DESIRED_SIZEসম্ভবত প্রতিস্থাপন করতে পারেন , সম্ভবত whileলুপের মধ্যে।
পাইপব্রোস

3

বিষয়বস্তু বংশীধ্বনিতুল্য দ্বারা /dev/urandomকরতে headআপনি একটি ফাইল আউটপুট পুনর্নির্দেশ করতে পারেন, তাই:

 cat /dev/urandom | head --bytes=100 >> foo.bar

100 বাইট আবর্জনা সহ আপনাকে একটি ফাইল দেবে।


1
echo "This is just a sample line appended  to create a big file. " > dummy.txt
i=1
while [ $i -le 21 ]
do
  cat dummy.txt >> bigfile
  cat bigfile > dummy.txt
  (( i++ ))
done

আপনার উইন্ডোজ স্ক্রিপ্টের একই প্রভাব কিন্তু ব্যাশে, আপনি সরাসরি কোনও ফাইল নিজের সাথে সংযুক্ত করতে পারবেন না।


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