我可以找到文件夹中所有文件的数量,但是得到的数量相当大。
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.
答案1
您可以使用printf
的操作find
以所需的格式仅打印修改时间,然后使用sort
和uniq
:
find . -type f -printf '%TY-%Tm-%Td\n' | sort | uniq -c
-printf '%TY-%Tm-%Td\n'
2015-05-23
以 eg格式打印文件的修改时间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
+ 的解决方案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] 的内容(即日期 + 计数)。
您可能希望使用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