লিনাক্সে, চেষ্টা করুন:
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