ফাইলের শেষ অংশটি কাটাতে `dd` ব্যবহার করুন


18

এটি করার জন্য সম্ভবত সহজ কৌশল আছে তবে আমি ম্যান পৃষ্ঠা থেকে অঙ্ক করতে পারি না।

উদাহরণস্বরূপ, ব্যবহার করে আমি কীভাবে अंतिम 1MB ফাইল থেকে কাটব dd?


1
আপনি সর্বশেষ 1MB ব্যতীত সেই ফাইলটির একটি অনুলিপি চান, না আপনি অন্য ফাইলটিতে সর্বশেষ এমবি অনুলিপি চান?
মাদুর

আমি সর্বশেষ 1MB চাই
zetah

উত্তর:


29

ঠিক আছে, ধরে নিই statএবং bashআপনার সাথে ফাইলের আকারটি পেতে পারেন:

stat -c %s your_file

আপনি যদি $amountসেই ফাইলটির সাথে সর্বশেষ বাইটগুলি বের করতে চান তবে আপনি এটি ddকরতে পারেন:

dd if=your_file of=extracted_part \
   bs=1 count=$amount \
   skip=$(( $(stat -c %s your_file) - $amount ))

তবে স্যানার পদ্ধতির ব্যবহারটি হ'ল tail:

tail -c $(( 1024*1024 )) your_file > target_file

কোন -cবিকল্প নেই head?
এডিটিসি

আমি মনে করি তার অর্থ হ'ল + 24 ((1024 * 1024)): -সি, - বিটস = কে শেষ কে বাইট আউটপুট; বিকল্পভাবে, প্রতিটি ফাইলের Kth দিয়ে শুরু করে আউটপুট বাইট করতে -c + K ব্যবহার করুন
ভানুয়ান

5
dd - সাহায্য
ব্যবহার: ডিডি [অপার্যান্ড] ...
  বা: ডিডি বিকল্প
অপারেন্ডগুলি অনুসারে রূপান্তরকরণ এবং ফর্ম্যাট করা কোনও ফাইল অনুলিপি করুন।

  bs = BYTES একবারে BYTES বাইট পড়ুন এবং লিখুন (এছাড়াও ibs =, obs = দেখুন)
  cbs = BYTES একবারে BYTES বাইট রূপান্তর করে
  কমান্ড = CONVS কমা দ্বারা বিচ্ছিন্ন প্রতীক তালিকার হিসাবে ফাইলটি রূপান্তর করে
  গণনা = ব্লকগুলি কেবল ব্লক ইনপুট ব্লক অনুলিপি করে
  ibs = BYTES একবারে BYTES বাইট পড়ে (ডিফল্ট: 512)
  if = FILE স্ট্যান্ডিনের পরিবর্তে ফাইল থেকে পড়ে
  iflag = FLAGS কমা দ্বারা পৃথক করা প্রতীক তালিকার মতো পড়ে
  obs = BYTES একবারে BYTES বাইট লিখুন (ডিফল্ট: 512)
  অফ = স্টাইল স্টাডাউটের পরিবর্তে ফাইলে লিখুন
  oflag = FLAGS কমা দ্বারা পৃথক করা প্রতীক তালিকা অনুযায়ী লিখুন
  অনুসন্ধান = ব্লকগুলি আউটপুট শুরুর সময় ব্লকগুলি ওবস-আকারের ব্লকগুলি এড়িয়ে যান
  ইনপুট শুরু হওয়ার পরে skip = BLOCKS এড়িয়ে যান ব্লকস ইবস-আকারের ব্লক
  স্থিতি = noxfer দমন স্থানান্তর পরিসংখ্যান

ব্লকস এবং বাইটস নিম্নলিখিত গুণক প্রত্যয় অনুসরণ করা যেতে পারে:
সি = 1, ডাব্লু = 2, বি = 512, কেবি = 1000, কে = 1024, এমবি = 1000 * 1000, এম = 1024 * 1024, এক্সএম = এম
জিবি = 1000 * 1000 * 1000, জি = 1024 * 1024 * 1024, এবং টি, পি, ই, জেড, ওয়াই এর জন্য

যদি ফাইলের আকার হুবহু 10MB হয়, 1024 * 10 10240K এটি শেষ 1024 কে ছাড়বে। আপনি ইবস এবং ওবস বিকল্পগুলি ব্যবহার করে যে ব্লক আকারটি কাজ করছেন তা নির্দিষ্ট করা উচিত।

1M = 1024K 
1024*9 = 9216  
dd if=/10/MB/file of=/9/MB/file count=9216K ibs=1K obs=1K
dd if=/10/MB/file of=/9/MB/file count=9M ibs=1M obs=1M

আপনি প্রথম 1MB এড়িয়ে যাওয়া ফাইলটির শেষে পড়া স্কিপ বিকল্পটি ব্যবহার করে কোনও ফাইলের প্রথম 1MB এড়িয়ে যেতে পারেন।

dd if=/10/MB/file of=/9/MB/file skip=1M ibs=1M obs=1M

সন্ধান বিকল্পটি ব্যবহার করে আপনি আপনার আউটপুট ফাইলের একটি নির্দিষ্ট জায়গায় একটি লিখতে পারেন। বলুন আপনি প্রথম 1MB রাখতে এবং শেষ 8MB লিখে রাখতে চান।

dd if=/10/MB/file of=/9/MB/file skip=1M seek=1M count=8M ibs=1M obs=1M

আপনি সঠিক পরিমাণে ডেটা ইন-আউট-এ পেয়েছেন তা নিশ্চিত করার জন্য আপনার ফাইলের আকার সম্পর্কে কিছু বিশদ নেওয়া দরকার।

ls -s --block-size 1K ./my/10MB/file
মানুষ ls

       --block আকার = size
              সাইজ-বাইট ব্লক ব্যবহার করুন। নীচে SIZE ফর্ম্যাটটি দেখুন

       -স, - আকার
              প্রতিটি ফাইলের বরাদ্দ আকার, ব্লকগুলিতে মুদ্রণ করুন

       সাইজ হতে পারে (বা বিকল্প হিসাবে একটি পূর্ণসংখ্যা হতে পারে) এর মধ্যে একটি হতে পারে
       নিম্নোক্তকরণ: কেবি 1000, কে 1024, এমবি 1000 * 1000, এম 1024 * 1024, এবং আরও, জি, টি,
       পি, ই, জেড, ওয়াই
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.