ধরে নিই যে অভ্যন্তরীণ হার্ডলিঙ্কগুলি নেই (অর্থাত 1 টিরও বেশি হার্ডলিঙ্কযুক্ত প্রতিটি ফাইল গাছের বাইরে থেকে সংযুক্ত), আপনি এটি করতে পারেন:
find . -links -2 -print0 | du -c --files0-from=-
সম্পাদনা করুন এবং এখানে আমি মন্তব্যটিতে স্কেচ করেছি, প্রয়োগ করেছি। কেবল ছাড়া du
; লক্ষ্য করার জন্য @ স্টেফেন চ্যাজেলাস থেকে কুদোস du
প্রয়োজনীয় নয়। শেষে ব্যাখ্যা।
( find . -type d -printf '%k + ' ; \
find . \! -type d -printf '%n\t%i\t%k\n' | \
sort | uniq -c | \
awk '$1 >= $2 { print $4 " +\\" }' ; \
echo 0 ) | bc
আমরা যা করি তা হ'ল প্রতিটি প্রাসঙ্গিক ফাইলের ডিস্কের ব্যবহার (কেবিতে) দিয়ে প্লাস চিহ্ন দ্বারা আলাদা করে স্ট্রিং তৈরি করা। তারপরে আমরা সেই বড় সংযোজনটি ফিড করি bc
।
প্রথম find
অনুরোধটি ডিরেক্টরিগুলির জন্য এটি করে।
দ্বিতীয় find
মুদ্রণ লিঙ্ক গণনা, ইনোড এবং ডিস্ক ব্যবহার। আমরা sort | uniq -c
একটি তালিকা পেতে গাছটি (গাছের উপস্থিতির সংখ্যা, লিঙ্ক গণনা, ইনোড, ডিস্ক ব্যবহার) এর তালিকাটি পাস করি ।
আমরা সেই তালিকাটি পাস করেছি awk
এবং, যদি প্রথম ক্ষেত্রটি (উপস্থিতিগুলির # টি) দ্বিতীয় (# হার্ডলিঙ্কগুলির) এর চেয়ে বড় বা সমান হয়, যার অর্থ গাছের বাইরে থেকে এই ফাইলটির লিঙ্ক নেই, তবে চতুর্থ ক্ষেত্রটি মুদ্রণ করুন ( ডিস্ক ব্যবহার) একটি প্লাস চিহ্ন এবং একটি ব্যাকস্ল্যাশ সংযুক্ত সঙ্গে।
পরিশেষে আমরা একটি আউটপুট পাই 0
, সুতরাং সূত্রটি সিন্টেক্সিকভাবে সঠিক (এটি +
অন্যথায় প্রবেশ করবে) এবং এটিতে প্রেরণ করব bc
। ইসস।
(তবে আমি যদি সহজ যথেষ্ট উত্তর দেয় তবে আমি সহজ প্রথম পদ্ধতিটি ব্যবহার করব))
du
কেবলমাত্র ফাইলের মাপগুলি গণনা করে যদি আপনি-l
/--count-links
অপশনটি ব্যবহার না করেন তবে সেগুলি শক্ত লিঙ্কযুক্ত রয়েছে । আপনিdu
পুরো ট্রিটিতে দু'বার দৌড়ান , সেই বিকল্পটি ছাড়া এবং সেগুলি ছাড়াই এবং মাপের মধ্যে পার্থক্যটি হওয়া উচিত যে আপনি সমস্ত ডিরেক্টরিতে কতটা স্থান সঞ্চয় করেছেন।