每天计算一个文件夹中的文件数


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. 

左边的数字是多少? 109294109294
Sergiy Kolodyazhnyy

1
抱歉,这是每天的文件数。
tasmaniski

Answers:


21

您可以执行以下printf操作:find仅打印所需格式的修改时间,然后使用sortuniq

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
注意:可以使用Gnuplot以图形方式查看这些内容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"
user1717828 2013年

有趣的方式,但是不起作用。我有图形但没有数据...
tasmaniski

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 + array [key]的内容(即date + count)。

您可能要用来sort组织输出,尤其是sort -k 1根据第1列(即日期)来组织输出,但这是可选的。也-maxdepth 1检查当前文件夹中的文件。如果还要在子目录中查找文件,请删除-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版本运行得更快,尤其是在文件数量非常大且日期不同的情况下。一步折叠到计数可以避免在计数之前对大量重复项进行排序。
彼得·科德斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.