প্রতিদিন একটি ফোল্ডারে ফাইল সংখ্যা গণনা করুন


11

আমি ফোল্ডারে সমস্ত ফাইলের সংখ্যার সন্ধান করতে পারি তবে আমি বেশ বড় সংখ্যা পেয়েছি।

find . -type f | wc -l      #find number of files in DIR
ls -lrt                     #list all files order by date  

পার্ট ডে ফাইলগুলি কীভাবে সন্ধান করবেন?

সুতরাং, ফলাফলটি এমন কিছু হওয়া উচিত:

# left number is number of files and right is one day.

109294 2016-06-27
101555 2016-06-26
88123  2016-06-25 
... etc. 

এবং বাম সংখ্যা কি? 109294এবং109294
সের্গেই কলডিয়াজন্য

1
Sry, এটি প্রতিদিন ফাইলের সংখ্যা।
তাসমানিস্কি

উত্তর:


21

আপনি কেবল পছন্দসই বিন্যাসে পরিবর্তনের সময়গুলি মুদ্রণের printfক্রিয়াটি findব্যবহার করে sortএবং এটি ব্যবহার করে এবং করতে পারেন uniq:

find . -type f -printf '%TY-%Tm-%Td\n' | sort | uniq -c
  • -printf '%TY-%Tm-%Td\n'উদাহরণস্বরূপ 2015-05-23ফর্ম্যাটে ফাইলগুলির পরিবর্তনের সময় মুদ্রণ করে

  • sortআউটপুট বাছাই করে এবং uniq -cতারিখ অনুযায়ী গণনা করে

উদাহরণ:

~/foobar% find . -type f -printf '%TY-%Tm-%Td\n' | sort | uniq -c
      3 2004-06-29
      1 2004-08-23
      1 2004-09-15
      1 2004-09-18
      1 2005-07-24
      1 2006-02-05
      2 2008-06-25
      3 2008-12-31
      1 2009-03-13
      1 2009-04-30
      1 2010-04-04
      2 2010-09-01
      8 2011-07-13
     15 2011-08-27
      3 2011-11-03
      3 2014-10-08

2
নোট: এগুলি গ্রুফ্লোটের সাথে গ্রাফিকভাবে দেখা যাবেfind . -type f -printf '%TY-%Tm-%Td\n' 2</dev/null | sort | uniq -c | tail -n +2 | gnuplot -p -e "set xdata time; set timefmt \"%Y-%m-%d\";set xtics rotate; plot '-' using 2:1 with impulses"
ব্যবহারকারী 1717828

আকর্ষণীয় উপায়, কিন্তু এটি কাজ করে না। আমি একটি গ্রাফিক পেয়েছি কিন্তু কোনও ডেটা ছাড়াই ...
তাসমানিস্কি

4

এখানে find+ সহ একটি সমাধান রয়েছেawk

find . -maxdepth 1 -type f -printf '%TY-%Tm-%Td\n' | awk '{array[$0]+=1}END{ for(val in array) print val" "array[val]   }'

মূলত যা ঘটে তা হ'ল আমরা সমস্ত নিয়মিত ফাইলগুলি সন্ধান করি এবং %Tফর্ম্যাট অনুসারে তাদের পরিবর্তনের সময়টি মুদ্রণ করি এবং তারপরে awkগ্রহণ করি এবং সহযোগী অ্যারেগুলি ব্যবহার করে প্রতিটি লাইন গণনা করি। END{}বিবৃতি ব্যবহারসমূহ forলুপ সংশ্লিষ্ট অ্যারের মধ্যে সব উপাদান মধ্য দিয়ে যেতে, এবং Key + অ্যারে [Key] বিষয়বস্তু প্রিন্ট (যা তারিখ + COUNT যায়)।

আপনি sortআউটপুটটি সংগঠিত করতে ব্যবহার করতে পারেন , বিশেষত sort -k 1কলাম 1 (যা তারিখ) এর উপর ভিত্তি করে, তবে এটি alচ্ছিক। এছাড়াও কেবল বর্তমান ফোল্ডারে-maxdepth 1 ফাইলগুলি পরীক্ষা করবে । আপনি যদি উপ-ডিরেক্টরিতেও ফাইলগুলি সন্ধান করতে চান তবে অংশটি সরিয়ে দিন remove-maxdepth 1

নমুনা আউটপুট

$ find . -maxdepth 1 -type f -printf '%TY-%Tm-%Td\n' | awk '{array[$0]+=1}END{ for(val in array) print val" "array[val]   }'

2015-09-29 1
2016-04-06 2
2016-04-07 10
2016-04-08 2
2015-11-05 2
2016-04-22 2
2016-04-23 6
2016-04-24 1
2015-11-21 2
2015-11-22 2

এটি |sort | uniq -cসংস্করণের চেয়ে দ্রুত চলতে পারে বিশেষত খুব বিশাল সংখ্যক ফাইল এবং বিভিন্ন দিনের একটি ছোট-ইশ সেট। এক ধাপে গণিতে নেমে যাওয়া গণনা করার আগে প্রচুর সংখ্যক সদৃশ বাছাই করা এড়ানো যায়।
পিটার কর্ডস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.