লিনাক্সে, চেষ্টা করুন:
find /my/path -maxdepth 1 -type f -printf '%TY-%Tm %s\n' | awk '{b[$1]+=$2} END{for (date in b) print date, b[date]}' | sort
কিভাবে এটা কাজ করে
find /my/path
এটি / আমার / পথে ফাইলগুলির সন্ধান করে।
-maxdepth 1
এটি findসাব-ডিরেক্টরিতে সন্ধান না করার জন্য বলে । (আপনি যদি পুনরাবৃত্ত অনুসন্ধান করতে চান তবে এই বিকল্পটি বাদ দিন))
-type f
এটি findঅনুসন্ধানগুলিকে নিয়মিত ফাইলগুলিতে সীমাবদ্ধ করতে বলে ।
-printf '%TY-%Tm %s\n'
এটি findপ্রতিটি ফাইলের জন্য বাইট আকারের পরে বছর-মাসের মুদ্রণ করতে বলে ।
যেহেতু তাদের জন্য আমাদের কোনও ব্যবহার নেই, তাই প্রাপ্ত ফাইলগুলির নাম মুদ্রিত হয় না।
b[$1]+=$2
জন্য প্রতিটি ফাইল পাওয়া যায়, আমরা গণনা যে মিশুক অ্যারের মধ্যে যে বছর-মাসের সমন্বয় তার বাইট গণনা, কলাম 2 থেকে পাওয়া, অ্যাড b।
END{for (date in b) print date, b[date]}
আমরা এর থেকে সমস্ত আউটপুট প্রক্রিয়া করার পরে find, আমরা ফলাফলগুলি মুদ্রণ করি।
sort
এটি তারিখের ক্রমে ফলাফলগুলি সাজায় orts
একাধিক লাইন সংস্করণ
যারা তাদের কোড পছন্দ করেন তাদের পক্ষে একাধিক লাইনে ছড়িয়ে পড়ে:
find /my/path -maxdepth 1 -type f -printf '%TY-%Tm %s\n' |
awk '
{
b[$1]+=$2
}
END{
for (date in b)
print date, b[date]
}
' | sort
উদাহরণ
আসুন এই ফাইলগুলির সাথে একটি ডিরেক্টরি বিবেচনা করুন:
$ ls -l
total 27816
-rw------- 1 john1024 john1024 2459173 Nov 23 2015 img100.jpg
-rw------- 1 john1024 john1024 3479750 Nov 23 2015 img101.jpg
-rw------- 1 john1024 john1024 4028939 Nov 23 2015 img102.jpg
-rw------- 1 john1024 john1024 2928519 Jul 30 18:55 img103.jpg
-rw------- 1 john1024 john1024 2948294 Jul 30 18:55 img104.jpg
-rw------- 1 john1024 john1024 3177583 Aug 1 16:56 img105.jpg
-rw-rw---- 1 john1024 john1024 3111737 Apr 18 2016 img106.jpg
-rw-rw---- 1 john1024 john1024 1441310 Apr 18 2016 img107.jpg
-rw-rw---- 1 john1024 john1024 2430158 Apr 25 16:26 img108.jpg
-rw-rw---- 1 john1024 john1024 2424504 Apr 25 16:26 img109.jpg
আমাদের কমান্ড থেকে আউটপুট হয়:
$ find . -maxdepth 1 -type f -printf '%TY-%Tm %s\n' | awk '{b[$1]+=$2} END{for (date in b) print date, b[date]}' | sort
2015-11 9967862
2016-04 9407709
2016-07 5876813
2016-08 3177583
পরিমার্জনা
যদি আমরা বাইটের পরিবর্তে আউটপুটটি মেবিবাইটে (এমআইবি) চাই, আমরা ইউনিটগুলিকে এই জাতীয় রূপান্তর করতে পারি:
$ find . -maxdepth 1 -type f -printf '%TY-%Tm %s\n' | awk '{b[$1]+=$2} END{for (date in b) print date, b[date]/1024**2, "MiB"}' | sort
2015-11 9.50609 MiB
2016-04 8.97189 MiB
2016-07 5.60457 MiB
2016-08 3.03038 MiB
আমরা আউটপুট ফর্ম্যাটটি ব্যবহার করে আরও নিয়ন্ত্রণ পেতে পারি printf। এখানে, দশমিক পয়েন্টের পরে মাত্র একটি অঙ্ক রাখতে, আমরা এর সাথে আকারটি ফর্ম্যাট করি %5.1f:
$ find . -maxdepth 1 -type f -printf '%TY-%Tm %s\n' | awk '{b[$1]+=$2} END{for (date in b) printf "%s %5.1f MiB\n", date, b[date]/1024**2}' | sort
2015-11 9.5 MiB
2016-04 9.0 MiB
2016-07 5.6 MiB
2016-08 3.0 MiB