ফাইলগুলি বিভক্ত হওয়ার পরে আবার যোগদানের সর্বোত্তম উপায় কী?


73

আমার কাছে যদি একটি বড় ফাইল থাকে এবং এটি এটিকে 100 মেগাবাইট খণ্ডে বিভক্ত করতে হয় তবে আমি করব

split -b 100m myImage.iso

এটি সাধারণত আমাকে কিছু দেয়

xaa
xab
xac
xad

এবং তাদের একসাথে ফিরে পেতে আমি ব্যবহার করা হয়

cat x* > myImage.iso

দেখে মনে হচ্ছে একটি গ্রুপের ফাইলের কোডের প্রতিটি লাইনের সাথে পড়া catএবং আউটপুটটিকে নতুন ফাইলে ডাইরেক্ট করার চেয়ে আরও কার্যকর উপায় হওয়া উচিত । কেবলমাত্র দুটি ফাইল খোলার মতো, EOFপ্রথমটি থেকে চিহ্নিতকারীকে সরিয়ে ফেলা এবং এগুলি সংযুক্ত করার - সমস্ত বিষয়বস্তু না নিয়েই।

বাইনারি ফাইলগুলির জন্য উইন্ডোজ / ডস-এর একটি অনুলিপি কমান্ড রয়েছে। সহায়তায় উল্লেখ করা হয় যে এই কমান্ডটি একাধিক ফাইল একত্রিত করতে সক্ষম হয়ে তৈরি হয়েছিল। এটি এই বাক্য গঠন নিয়ে কাজ করে: ( /bবাইনারি মোডের জন্য)

copy /b file1 + file2 + file3 outputfile

বিড়ালের চেয়ে লিনাক্সে বড় ফাইলগুলিতে যোগ দেওয়ার মতো কিছু বা এর থেকে ভাল উপায় কি?

হালনাগাদ

দেখে মনে catহচ্ছে এটি আসলে ফাইলগুলিতে যোগদানের সঠিক উপায় এবং সর্বোত্তম উপায়। আমি সঠিক কমান্ডটি সমস্ত বরাবর ব্যবহার করছিলাম তা জেনে আনন্দিত :) আপনার মতামতের জন্য সবাইকে ধন্যবাদ।


22
পার্শ্ব নোট: ব্যবহার না করা ভাল cat x*, কারণ ফাইলের ক্রম আপনার স্থানীয় সেটিংসের উপর নির্ভর করে। Esccat x টিপুন এবং তারপরে টাইপ করা আরও ভাল - আপনি ফাইলগুলির প্রসারিত ক্রম দেখতে পাবেন এবং পুনরায় সাজতে পারবেন। *
rozcietrzewiacz

16
পরিবর্তে cat x*আপনি শেল ব্রেস সম্প্রসারণ বিবেচনা করতে পারেন, cat xa{a..g}যা cat xaa xab xac xad xad xae xaf xag-
পিটার.ও

3
@ ক্রোয়েট্রিজেভিয়াকজ - আপনি কীভাবে আমার লোকাল সেটিংটি ভেঙে ফেলতে পারবেন তার একটি উদাহরণ দিতে পারেন cat x*? নতুন লোকেল সেটিং প্রভাব পড়বে না split, যাতে যদি splitএবং cat x*একই সিস্টেমে ব্যবহার করা হয় তারা সবসময় কাজ করবে?
সিডব্লু

3
"দুই ফাইল খোলার, প্রথম এক থেকে ফাইলের শেষে মার্কার সরানোর এবং তাদের সংযোগ -। সমস্ত সামগ্রী মধ্য দিয়ে যেতে না করেও" ... শোনাচ্ছে মত আপনি কি আপনি চান করতে একটি নতুন ফাইল সিস্টেম উদ্ভাবিত প্রয়োজন
JoelFan

6
@cwd: এ খুঁজছি split.cগনুহ Coreutils এ, প্রত্যয় অক্ষরের একটি নির্দিষ্ট অ্যারে থেকে নির্মাণ করা হয়: static char const *suffix_alphabet = "abcdefghijklmnopqrstuvwxyz";। প্রত্যয়টি লোকাল দ্বারা প্রভাবিত হবে না। (তবে আমি মনে করি না যে কোনও বুদ্ধিমান লোকেল ছোট হাতের অক্ষরগুলিকে পুনরায় সাজিয়ে তুলবে; এমনকি ইবিসিডিআইসি তাদের মানক শৃঙ্খলা বজায় রেখেছে))
কিথ থম্পসন

উত্তর:


50

এটাই ঠিক তার catজন্য তৈরি করা হয়েছিল। এটি যেহেতু এটি প্রাচীনতম জিএনইউ সরঞ্জামগুলির মধ্যে একটি, তাই আমি মনে করি যে এটি অন্য কোনও সরঞ্জামের চেয়ে দ্রুত / আরও ভাল করে করা খুব সম্ভব নয়। এবং এটি পাইপ করছে না - এটি কেবলমাত্র আউটপুটকে পুনর্নির্দেশ করে।


আপনি যে cat x, then press Escকৌশলটি উল্লেখ করেছেন তা ঝরঝরে .. আমি সেরকম কিছু খুঁজছিলাম, ধন্যবাদ ... ভাল মন্তব্য এবং ভাল উত্তর
পিটার.ও

2
আপনাকে স্বাগতম! :) এছাড়াও, যখন আপনার কাছে কমান্ড লাইনে থাকা ফাইলগুলির তালিকা রয়েছে, আপনি Ctrl+Wকোনও শব্দ বের Ctrl+Yকরতে এবং তারপরে এটি আটকে দিতে ব্যবহার করতে পারেন ।
rozcietrzewiacz

বিড়ালটির অর্থ "
কনটেনেটেট

4
.. এবং একটি ল্যাটিন শব্দ "পরম্পরা" যা "একটি চেইন" অর্থ থেকে "সন্নিবদ্ধ করা" derrives .. concatenating একটি চেইন এর লিঙ্ক আপ যোগদান করছে। ... (এবং আরও কিছুটা অবধি , একটি ক্যাটেনারি বক্ররেখাও "ক্যাটেনা" থেকে এসেছে It এটি চেইন যেভাবে ঝুলছে
সেভাবেই

19

ফণা অধীনে

প্রথম ফাইলটি অনুলিপি করা, তারপরে দ্বিতীয় ফাইলটি অনুলিপি করা ছাড়া আরও কার্যকর উপায় নেই। উভয় ডস copyএবং catএটি।

প্রতিটি ফাইলই ডিস্কের অন্যান্য ফাইলগুলির থেকে স্বাধীনভাবে সঞ্চিত থাকে। ডিস্কের মতো ডিভাইসে ডেটা সঞ্চয় করতে ডিজাইন করা প্রায় প্রতিটি ফাইল সিস্টেমই ব্লকগুলি দ্বারা পরিচালিত হয়। যা ঘটে তার একটি অত্যন্ত সরল উপস্থাপনা এখানে দেওয়া হয়েছে: ডিস্কটি 1kB এর ব্লকগুলিতে বিভক্ত হয় এবং প্রতিটি ফাইলের জন্য অপারেটিং সিস্টেম এটির ব্লকগুলির তালিকা সংরক্ষণ করে stores বেশিরভাগ ফাইলগুলি দীর্ঘসংখ্যক ব্লকের লম্বা নয়, তাই শেষ ব্লকটি কেবল আংশিকভাবে দখল করে। অনুশীলনে, ফাইল সিস্টেমগুলির অনেকগুলি অপ্টিমাইজেশন রয়েছে, যেমন বেশ কয়েকটি ফাইলের মধ্যে শেষ আংশিক ব্লক ভাগ করে নেওয়া বা "ব্লক 46798 থেকে 47913" ব্লক 46798, ব্লক 46799,… "সংরক্ষণ না করে" oring যখন অপারেটিং সিস্টেমটিকে একটি নতুন ফাইল তৈরি করা দরকার তখন এটি বিনামূল্যে ব্লকগুলির সন্ধান করে। ব্লকগুলি একটানা হতে হবে না: যদি কেবল 4, 5, 98 এবং 178 ব্লকগুলি বিনামূল্যে থাকে তবে আপনি একটি 4 কেবি ফাইল সঞ্চয় করতে পারেন।

আপনি মিড-ফাইলে আংশিক ব্লককে সমর্থন করতে পারেন, তবে এটি যথেষ্ট জটিলতা যুক্ত করবে, বিশেষত যখন অনুক্রমিকভাবে ফাইলগুলিতে অ্যাক্সেস করা হয়েছিল: 10340 তম বাইটে লাফাতে আপনি 11 তম ব্লকের 100 ম বাইটে লাফিয়ে উঠতে পারবেন না, আপনি প্রতিটি মধ্যস্থতাকারী ব্লকের দৈর্ঘ্য পরীক্ষা করতে।

ব্লকগুলির ব্যবহারের কারণে আপনি কেবল দুটি ফাইলে যোগ দিতে পারবেন না, কারণ সাধারণভাবে প্রথম ফাইলটি মিড-ব্লকে শেষ হয়। অবশ্যই, আপনার একটি বিশেষ কেস থাকতে পারে তবে আপনি যদি উভয় ফাইলই মুছে ফেলতে চান তবে কনটেন্টেট করার সময়। বিরল অপারেশনের জন্য এটি একটি সুনির্দিষ্ট হ্যান্ডলিং হবে। এই ধরনের বিশেষ হ্যান্ডলিং নিজস্বভাবে বাঁচে না, কারণ একটি সাধারণ ফাইল সিস্টেমে একই সাথে অনেকগুলি ফাইল অ্যাক্সেস করা হচ্ছে। সুতরাং আপনি যদি একটি অপ্টিমাইজেশন যুক্ত করতে চান, আপনার সাবধানে চিন্তা করতে হবে: যদি অন্য কোনও প্রক্রিয়া জড়িত ফাইলগুলির মধ্যে একটি পড়তে থাকে তবে কী হবে? কেউ যদি A এবং B এর সাথে সংযুক্ত করার চেষ্টা করে তবে কেউ কি হবে? ইত্যাদি। সব মিলিয়ে, এই বিরল অপ্টিমাইজেশন একটি বিশাল বোঝা হবে।

সব মিলিয়ে অন্য কোথাও বড় বড় ত্যাগ ছাড়াই আপনি ফাইলগুলিতে যোগদানকে আরও দক্ষ করতে পারবেন না। এটা মূল্য নয়।

বিভাজন এবং যোগদানের উপর

splitএবং catফাইলগুলি বিভক্তকরণ এবং যোগদানের সহজ উপায়। splitবর্ণানুক্রমিক ক্রমে নামযুক্ত ফাইলগুলি উত্পাদন করার যত্ন নেয়, যাতে cat *যোগদানের জন্য কাজ করে।

catযোগদানের একটি খারাপ দিক এটি সাধারণ ব্যর্থতা মোডগুলির বিরুদ্ধে শক্ত নয় against ফাইলগুলির মধ্যে একটি যদি কাটা বা অনুপস্থিত থাকে catতবে অভিযোগ করবে না, আপনি ক্ষতিগ্রস্থ আউটপুট পাবেন।

এমন সংক্ষেপণ ইউটিলিটিগুলি রয়েছে যেগুলি মাল্টিপার্ট আর্কাইভ তৈরি করে, যেমন zipsplitএবং rar -v। এগুলি খুব অদৃশ্য নয়, কারণ তারা বিভাজন ছাড়াও সংযোগ এবং প্যাক করে (একাধিক ফাইল একত্রে একত্রিত করে) (এবং যোগদানের সাথে সাথে বিপরীতভাবে আনপ্যাক এবং সঙ্কোচিত)। তবে এগুলিতে এটি কার্যকর যে তারা আপনার যাবতীয় অংশ আছে এবং অংশগুলি সম্পূর্ণ রয়েছে তা যাচাই করে।


8

মনে হচ্ছে সিস্টেমের stdin/ এর মাধ্যমে সমস্ত বিষয়বস্তু পাইপ করার চেয়ে আরও কার্যকর উপায় হওয়া উচিতstdout

আসলে যা ঘটছে তা বাদ দিলে। শেলটি স্ট্যান্ডআউটকে cat সরাসরি ওপেন ফাইলের সাথে সংযুক্ত করছে , যার অর্থ "স্টাডাউট দিয়ে যাওয়া" ডিস্কে লেখার সমান।


আমি ঠিক ক্যানসোলে কয়েকটি গিগাবাইট কোড প্রদর্শন করতে বিড়ালটি ব্যবহার করার কথা ভাবছিলাম, তারপরে এটি ক্যাপচার করে একটি ফাইল এনে দেওয়া হয়েছিল। আমি যখন বিড়াল ব্যবহার করি এবং আউটপুটটি আমি দেখতে না পাই সেগুলি পুনর্নির্দেশ করিবার আগে যা ঘটতে হবে তার জন্য আমার এই মানসিক চিত্রটি। এটা ঠিক যদি একটি উপায় ছিল আপনি, দুই ফাইল খুলতে পারে তাদের সংযোগ, এবং তারপর করলে সেগুলি বন্ধ হয়ে এটা দিয়ে কোড লাইনের সব মাধ্যমে চলমান অধিক কার্যকরী হবে ভালো লাগে cat। সরাসরি সংযোগ সম্পর্কে আমাকে জানানোর জন্য ধন্যবাদ।
cwd

@cwd এমন একটি ফাইল সিস্টেম ডিজাইন করা সম্ভব হবে যেখানে আপনি দুটি ফাইল যুক্ত করতে পারেন তবে এটি ফাইল সিস্টেমের নকশাটিকে জটিল করে তুলবে। আপনি প্রচুর সাধারণ কাজকে আরও জটিল এবং ধীর করে তোলার জন্য ব্যয় করে সেই এক অপারেশনের জন্য অনুকূলিত হন।
গিলস

@ গিলস - নিম্ন স্তরের বিশদ সম্পর্কে আরও জানতে আগ্রহী হবেন। আমার কাছে, বেশ কয়েকটি ফাইলের জন্য হার্ড ডিস্কের বাইরে থাকা সমস্ত সেক্টর পড়া এবং তারপরে এগুলি আবার ডিস্কের অন্য অব্যবহৃত খাতগুলিতে ফেলে দেওয়া অকার্যকর বলে মনে হয়। এবং আমি মনে করি অনেক সময় ফ্রি সেক্টরগুলির একাধিক ব্লক জুড়ে বড় ফাইলগুলি অবশ্যই সংরক্ষণ করা উচিত কারণ সেগুলি সঞ্চয় করার জন্য সর্বদা পর্যাপ্ত ব্লক পাশাপাশি থাকতে পারে না। সুতরাং তাত্ত্বিকভাবে আপনি ইওএফ চিহ্নিতকারীকে সরিয়ে দিয়ে এবং পরবর্তী ফাইলটির শুরুতে সেক্টরগুলির গ্রুপের দিকে ইশারা করে একটিতে ফাইল যুক্ত করতে পারেন। * নিক্স শক্তিশালী তাই আমি ভাবলাম বিড়ালের চেয়ে আরও ভাল উপায় যদি আছে?
cwd

@cwd- এর কোনও "ইওএফ চিহ্নিতকারী" নেই। কোনও বুদ্ধিমান আধুনিক ফাইল সিস্টেম এটির মতো কাজ করে না, কারণ এটি কিছু অক্ষরগুলিকে ফাইলগুলিতে ঘটতে বাধা দেয় (বা অন্যথায় জটিল এনকোডিংগুলির প্রয়োজন হয়)। এমনকি যদি কোনও ইওফ চিহ্নিতকারী উপস্থিত থাকে তবে বেশিরভাগ সময় আপনার পরে সঠিক ফাইলটি থাকে না।
গিলস

আমি ইওএফ চিহ্নিতকারীকে বোঝাতে চেয়েছিলাম এবং আসল ইওএফ চিহ্নিতকারী নয়। অন্যথায় যদি আপনি হার্ড ড্রাইভের কোনও ফাইলের বিট এবং বাইটগুলি দেখেন তবে আপনি কীভাবে জানেন যে এটি কোথায় শেষ হয়েছে? আপনি কি এর শুরুতে ফাইলের দৈর্ঘ্য নির্দিষ্ট করেন? আমি সত্যিই নিম্ন স্তরের জিনিস সম্পর্কে কথা বলছি। আপনি কি উল্লেখ করছেন এটি কি?
সিডব্লু

3

আমার একবারে ঠিক এই সমস্যাটি ছিল: আমি কয়েকটি ফাইলগুলিতে যোগদান করতে চেয়েছিলাম, তবে এগুলিকে দ্বিগুণ রাখার মতো পর্যাপ্ত ডিস্কের জায়গা ছিল না।

তাই আমি একগুচ্ছ প্রোগ্রাম লিখেছি:

  • ফাইল পড়ার দ্বারা "স্তন্যপান" করতে, স্টাডাউটে প্রেরণ এবং, সমাপ্ত হলে, এটি মুছে ফেলুন
  • এবং একটিকে "ফ্লাইয়ে" বাফার করতে হবে।

এটি আমাকে এমন কিছু করতে সক্ষম করেছে

partto sourcefile | mybuffer 128M >>cumufile

এবং এইভাবে 128 এম এখনও অলিখিত লেখা থাকা অবস্থায় উত্স ফাইলটি সরিয়ে ফেলছে। কিছুটা বিপজ্জনক, তবে ডেটা যদি সেই মূল্যবান না হয় বা সেগুলি অন্য কোথাও উপস্থিত থাকে, তবে এটি সম্ভাব্য।

প্রয়োজনে, উত্সটি সরবরাহ করতে পারি।


0

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

$ mkfifo myImage.iso
$ cat xa{a..g} > myImage.iso &

এবং তারপরে myImage.isoউদাহরণস্বরূপ ব্যবহার করুন

$ md5sum myImage.iso

যদিও অবশ্যই myImage.isoএকটি বিশেষ ফাইল (নামযুক্ত পাইপ) এবং কোনও নিয়মিত ফাইল নয়, সুতরাং এটি আপনি ব্যবহার করার চেষ্টা করছেন তার উপর নির্ভর করে বা ব্যবহার নাও করা হতে পারে।


0

ফাইল বিভাজন

আকার অনুসারে বিভক্ত করুন

আপনি যদি বড় ফাইলকে ছোট ফাইলগুলিতে বিভক্ত করতে চান এবং ছোট আউটপুট ফাইলের নাম এবং আকার চয়ন করতে চান তবে এটি।

split -b 500M videos\BigVideoFile.avi SmallFile.

এইভাবে আপনি একটি বড় ফাইল 500 এমবি এর ছোট অংশগুলিতে বিভক্ত করতে পছন্দ করেন। এছাড়াও আপনি চান যে পার্ট ফাইলের নাম হ'ল স্মলফাইলে। নোট করুন যে আপনার ফাইলের নামের পরে ডট লাগবে । ফলাফলটি নতুন ফাইল তৈরির মতো হওয়া উচিত:

SmallFile.ab SmallFile.ad SmallFile.af SmallFile.ah SmallFile.aj
SmallFile.aa SmallFile.ac SmallFile.ae SmallFile.ag SmallFile.ai SmallFile.ak
...

লাইনের সংখ্যা অনুসারে বিভক্ত করুন

আপনি পাঠ্য ফাইলটি 50 টি লাইনের মধ্যে সীমাবদ্ধ ছোট ফাইলগুলিতে বিভক্ত করবেন।

split -l 50 text_to_split.txt

ফলাফলটি এমন কিছু হওয়া উচিত:

xaa xab xac ...

বাইট দ্বারা বিভক্ত

বাইটগুলিতে কাস্টম আকারের ছোট ফাইলগুলির সাথে ছোট ফাইলগুলিতে বিভক্ত করুন:

split -b 2048 BigFile.mp4

ফলাফলগুলি লাইন সংখ্যা দ্বারা বিভাজন থেকে প্রাপ্ত ফলাফলের মতো হওয়া উচিত ।

ফাইল যোগদান

আপনি দুটি উপায়ে ফাইলগুলিতে যোগদান করতে পারেন। প্রথম এক:

cat SmallFile.* > OutputBigVideoFile.avi

বা সাথে:

cat SmallFile.?? > OutputBigVideoFile.avi

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

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