ধরে নিই যে অভ্যন্তরীণ হার্ডলিঙ্কগুলি নেই (অর্থাত 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পুরো ট্রিটিতে দু'বার দৌড়ান , সেই বিকল্পটি ছাড়া এবং সেগুলি ছাড়াই এবং মাপের মধ্যে পার্থক্যটি হওয়া উচিত যে আপনি সমস্ত ডিরেক্টরিতে কতটা স্থান সঞ্চয় করেছেন।