উত্তর:
আপনি পাইপ ( |) সন্ধান করছেন। এগুলি একাধিক কমান্ড সংযুক্ত করার এবং একটি কমান্ডের আউটপুটকে অন্য ইনপুট হিসাবে পাস করার একটি উপায়। এই ক্ষেত্রে, আপনি ইনপুট হিসাবে খুঁজে পাওয়া সমস্ত ফাইলের নাম পাসওয়ার্ড করতে চান du(যা আকারের গণনা করে)। তবে duফাইলের নাম প্রত্যাশা করে এবং ফলাফলগুলি findকেবলমাত্র পাঠ্যের একটি তালিকা (হ্যাঁ, পাঠ্যটি ফাইলের নামগুলি ধারণ করে, তবে duএটি জানতে পারে না যে এটি সমস্ত কিছুই দেখায় এটি হ'ল পাঠ্য), আপনাকে এমন কিছু ব্যবহার করতে xargsহবে যা প্রতিটি গ্রহণ করবে পাঠ্য লাইন, এটি একটি ফাইল নাম হিসাবে বিবেচনা করুন এবং এটি পাস du। এই সমস্ত একসাথে রেখে, আমরা পাই:
find . -name "*.o" | xargs du -sch
আপনার দেওয়া প্যাটার্নগুলি সর্বদা উদ্ধৃত করা উচিত find(যেমন আমি উপরে করেছি "*.o":)। যদি আপনি এটি না করেন তবে শেলটি *.oবর্তমান ডিরেক্টরিতে কোনও মিল থাকা ফাইলের নামের সাথে প্রসারিত করবে । এটি কেবলমাত্র আপনার ক্ষেত্রে ম্যাচের কোনও ফাইল না থাকার কারণে এটি কাজ করে।
এর -schজন্য পতাকাগুলি duএখানে নথিভুক্ত করা হয় man du:
-c, --total
produce a grand total
-h, --human-readable
print sizes in human readable format (e.g., 1K 234M 2G)
-s, --summarize
display only a total for each argument
তবে নোট করুন, তবে সাদা স্থান সহ ফাইলের নামের জন্য এটি ব্যর্থ হবে। এটি অবশ্যই অবজেক্ট ফাইলগুলির জন্য একটি সমস্যা হয়ে উঠবে না, তবে ভবিষ্যতে, আপনার যদি ফাঁকা জায়গাগুলি নিয়ে কাজ করার প্রয়োজন হয় তবেও ব্যবহার করুন:
find . -name "*.o" -print0 | xargs -0 du -sch
-print0তোলে findশূন্য বিভাজিত লাইন মুদ্রণ এবং -0তোলে xargsইনপুট হিসাবে যেমন লাইন নিতে।
বিকল্পভাবে, আপনি findনিজেই আকারগুলি মুদ্রণ করতে পারেন এবং তারপরে তাদের যোগ করতে পারেন:
find . -name "*.o" -printf '%s\n' | awk '{c+=$1}END{print c}'
এটি অনেকগুলি আর্গুমেন্ট রয়েছে এবং কমান্ডটি পৃথক কমান্ডে বিভক্ত হয়ে মন্তব্যে @ সার্জ দ্বারা উল্লিখিত সমস্যাটিও পেয়ে যাবে ।
আপনি যদি ব্যবহার করছেন bash(আপনি সম্ভবত আছেন) তবে একটি সহজ উপায় রয়েছে:
shopt -s globstar
du -sch **/*.o
shopt globstarকমান্ড তোলে **সমস্ত ফাইল ও বা একাধিক সাব মেলে। এটি সক্ষম করার পরে, **/*.oসমস্ত ফাইল (এবং ডিরেক্টরিগুলির) সাথে মিলবে যার নাম শেষ হয় .o, তাই আমরা এটিকে সরাসরি প্রেরণ করতে পারি du।
নোট করুন, findপদ্ধতির বিপরীতে, এটি লুকানো ফাইলগুলির সাথে মেলে না (যাদের নাম a দিয়ে শুরু হয় .)। এগুলিও মিলে যাওয়ার জন্য, করুন:
shopt -s dotglob globstar
du -sch **/*.o
shopt globstarউদাহরণটি বাদ দেয় -s; আমি shopt -s globstarআপনার দ্বিতীয় উদাহরণ অনুরূপ ব্যবহার করতে হবে ।
shopt OPTIONএকটি -sবা একটি -u(বা অন্য বিকল্প ছাড়া, দেখুন help shopt) কেবলমাত্র বিকল্পের বর্তমান মানটি মুদ্রণ করে। আপনার একটি shopt -s OPTIONচালু করতে হবে এবং shopt -u OPTIONএটি বন্ধ করতে হবে।
কমান্ড -exec চালাতে পতাকা ব্যবহার করুন (প্রতিটি ফাইলের অর্থ)du;
find . -name "*.o" -exec du -b {} \; | awk '{total+=$1}END{print total}'
নমুনা আউটপুট:
$ find . -name "*.txt" -exec du -b {} \; | awk '{total+=$1}END{print total,"bytes" }'
find: ‘./.cache/gvfs-burn’: Permission denied
find: ‘./.cache/unity’: Permission denied
852690242 bytes
findপুনরাবৃত্ত - এর অর্থ এটি সমস্ত উপ-ডিরেক্টরিতে চলে। আপনি যদি *.oবর্তমান ডিরেক্টরিতে সমস্ত ফাইল মোট পেতে চান তবে ঠিক করুন
du -b -c *.o
পার্ল সহ:
perl -le 'map { $sum += -s } @ARGV; print $sum' -- *.pdf
বর্তমান ডিরেক্টরিতে থাকা সমস্ত অ-লুকানো পিডিএফ ফাইলের আকার।
.oফাইলগুলি সন্ধান করছে এবং সেগুলি সাব-ডিরেক্টরিতে থাকতে পারে। প্রতিটি পুনরাবৃত্তির জন্য যোগফল মুদ্রণ এড়াতে আপনি এর }{আগেও যুক্ত করতে চাইতে পারেন print $sum। আমরা কেবল শেষটিই চাই।
duহবে এবং এটি একাধিকtotalলাইন তৈরি করবে । এখানে উদাহরণ আছে: paste.ubuntu.com/23092752