Đếm số lượng tệp trong một thư mục mỗi ngày


11

Tôi có thể tìm thấy số lượng của tất cả các tập tin trong thư mục nhưng tôi đã nhận được số lượng khá lớn.

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

Làm thế nào để tìm số tập tin theo ngày?

Vì vậy, kết quả sẽ là một cái gì đó như:

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

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

Và những con số bên trái là gì? 109294109294
Sergiy Kolodyazhnyy

1
Sry, đó là số lượng tập tin mỗi ngày.
tasmaniski

Câu trả lời:


21

Bạn có thể thực hiện việc này bằng cách sử dụng printfhành động findchỉ in thời gian sửa đổi ở định dạng mong muốn, sau đó sử dụng sortuniq:

find . -type f -printf '%TY-%Tm-%Td\n' | sort | uniq -c
  • -printf '%TY-%Tm-%Td\n'in thời gian sửa đổi của các tập tin ở 2015-05-23định dạng, ví dụ

  • sortsắp xếp đầu ra và uniq -cđếm theo ngày

Thí dụ:

~/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
NB: chúng có thể được xem bằng đồ họa với Gnuplot bằng cách sử dụngfind . -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"
user1717828

Cách thú vị, nhưng nó không hoạt động. Tôi có một hình ảnh nhưng không có dữ liệu ...
tasmaniski

4

Đây là một giải pháp với 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]   }'

Về cơ bản những gì xảy ra là chúng tôi tìm thấy tất cả các tệp thông thường và in thời gian sửa đổi của chúng theo quy định của %Tđịnh dạng, sau đó awktiếp quản và đếm từng dòng bằng cách sử dụng mảng liên kết. các END{}công dụng tuyên bố forvòng lặp để đi qua tất cả các yếu tố trong mảng liên quan, và in key + array [key] nội dung (mà là ngày + count).

Bạn có thể muốn sử dụng sortđể sắp xếp đầu ra, đặc biệt sort -k 1dựa trên cột 1 (đó là ngày), nhưng đó là tùy chọn. Cũng -maxdepth 1sẽ kiểm tra các tập tin chỉ trong thư mục hiện tại . Nếu bạn cũng muốn tìm tệp trong thư mục con, hãy xóa -maxdepth 1phần.

Sản lượng mẫu

$ 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

Điều này có thể chạy nhanh hơn |sort | uniq -cphiên bản, đặc biệt là với số lượng tệp rất lớn và một tập hợp nhỏ của các ngày khác nhau. Thu gọn xuống để đếm trong một bước để tránh sắp xếp một số lượng lớn các bản sao trước khi đếm.
Peter Cordes
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.