সিস্টেম কমান্ডের জন্য আর্গুমেন্টের তালিকা কত দীর্ঘ হতে পারে তার সর্বাধিক সীমা রয়েছে - MAX_ARG_PAGES
কার্নেলটি সংকলন করা হয় তার মানের উপর ভিত্তি করে এই সীমাটি বিকৃত-নির্দিষ্ট হয় এবং কার্নেলটি পুনরায় সংশোধন না করে পরিবর্তন করা যায় না।
শেল দ্বারা যেভাবে গ্লোব্বিং পরিচালনা করা হয় তার কারণে আপনি একই আর্গুমেন্ট ("* .jpg") ব্যবহার করলে এটি বেশিরভাগ সিস্টেম কমান্ডকে প্রভাবিত করে। যেহেতু গ্লোবটি প্রথমে শেল দ্বারা প্রক্রিয়া করা হয় এবং তারপরে কমান্ডটি পাঠানো হয়:
cp -uf *.jpg /targetdir/
শেলটির সাথে মূলত একই রকম যেমন আপনি লিখেছেন:
cp -uf 1.jpg 2.jpg ... n-1.jpg n.jpg /targetdir/
যদি আপনি প্রচুর জেপিগের সাথে কাজ করে থাকেন তবে এটি খুব দ্রুত নিয়ন্ত্রণহীন হয়ে উঠতে পারে। আপনার নামকরণের সম্মেলন এবং আপনার প্রকৃতপক্ষে যে ফাইলগুলি প্রক্রিয়া করতে হবে তার উপর নির্ভর করে আপনি একবারে ডিরেক্টরিতে আলাদা সাবসেটে সিপি কমান্ড চালাতে পারেন :
cp -uf /sourcedir/[a-m]*.jpg /targetdir/
cp -uf /sourcedir/[n-z]*.jpg /targetdir/
এটি কাজ করতে পারে তবে ঠিক কতটা কার্যকর তা নির্ভর করে আপনি আপনার ফাইল তালিকাটি কীভাবে সুবিধাজনক গ্লোবাল ব্লকগুলিতে বিভক্ত করতে পারেন তার উপর ভিত্তি করে।
Globbable। আমি এই শব্দটি পছন্দ করি
কিছু কমান্ড, যেমন সন্ধান এবং xargs , ব্যথার সাথে আকারযুক্ত যুক্তি তালিকা তৈরি না করে বড় ফাইল তালিকা পরিচালনা করতে পারে।
find /sourcedir/ -name '*.jpg' -exec cp -uf {} /targetdir/ \;
-অজেক আর্গুমেন্ট প্রতিটি ফাইলের নামের সাথে {rep প্রতিস্থাপন করে খুঁজে পাওয়া প্রতিটি ফাইলের জন্য একবার কমান্ড লাইনের অবশিষ্ট অংশটি চালাবে । যেহেতু সিপি কমান্ডটি একবারে কেবল একটি ফাইলে চালিত হয়, তর্কের তালিকা সীমাটি কোনও সমস্যা নয়।
প্রতিটি ফাইল পৃথকভাবে প্রক্রিয়া করার কারণে এটি ধীর হতে পারে। এক্সগার্স ব্যবহার করা আরও কার্যকর সমাধান দিতে পারে:
find /sourcedir/ -name '*.jpg' -print0 | xargs -0 cp -uf -t /destdir/
xargs দ্বারা উপলব্ধ পূর্ণ ফাইল তালিকা গ্রহণ করতে পারেন খোঁজ , এবং এটি ভেঙ্গে সামলানো মাপ এবং রান আর্গুমেন্ট তালিকার মধ্যে CP ঐ sublists প্রতিটি উপর।
অবশ্যই, আপনার কার্নেলটি পুনরায় সংশোধন করার জন্য আরও বড় মান নির্ধারণের সম্ভাবনা রয়েছে MAX_ARG_PAGES
। তবে আমি এই উত্তরে ব্যাখ্যা করতে ইচ্ছুক চেয়ে কার্নেলটি পুনরায় সংশ্লেষ করা আরও কাজ।