Linux 如何使用bash计算命令行上某个日期范围内的特定文件数?

Linux 如何使用bash计算命令行上某个日期范围内的特定文件数?,linux,bash,date,count,grep,Linux,Bash,Date,Count,Grep,请求只是特定目录中文件的基本计数。我当前使用ipswitch的流程: 将3月份的文件复制到我的本地目录窗口 按名称排序,如有必要,从本地数据库中删除不需要计数的文件 选择所有或特定文件,查看总数,并将其输入到我维护的电子表格中。 电子表格用于每月报告可交付成果 我知道一些unix/linux的基础知识,比如目录导航,有点了解grep,而对find几乎一无所知 我不知道如何在一个目录中搜索特定日期范围内的文件(按月),并计算有多少文件。。。有时使用特定的名称或扩展名。我想 ls -l |grep

请求只是特定目录中文件的基本计数。我当前使用ipswitch的流程:

将3月份的文件复制到我的本地目录窗口 按名称排序,如有必要,从本地数据库中删除不需要计数的文件 选择所有或特定文件,查看总数,并将其输入到我维护的电子表格中。 电子表格用于每月报告可交付成果

我知道一些unix/linux的基础知识,比如目录导航,有点了解grep,而对find几乎一无所知

我不知道如何在一个目录中搜索特定日期范围内的文件(按月),并计算有多少文件。。。有时使用特定的名称或扩展名。我想

ls -l |grep ...something something...
可能有用,但我遇到了麻烦

如果需要更多信息,请告诉我,抱歉这么冗长。

您可以使用查找进行筛选,使用wc进行计数

find . -mtime -$start -mtime +$end | wc -l
由于-mtime截断的方式,以及比较的排他性,一开始要获得正确的结果有点困难,但这是可行的

find /some/path -mtime +0  # Find files modified prior to 1 day ago.
find /some/path -mtime -0  # Find files modified after 1 day ago.
find /some/path -mtime +1 -mtime -6 # Files modified between 2 and 7 days ago.
例如,假设今天是4月2日,你想要整个3月。您的$start将是31,而$end将是0

要在4月13日运行相同的报告,您的$start将为42,$end将为13。

您可以使用find进行筛选,使用wc进行计数

find . -mtime -$start -mtime +$end | wc -l
由于-mtime截断的方式,以及比较的排他性,一开始要获得正确的结果有点困难,但这是可行的

find /some/path -mtime +0  # Find files modified prior to 1 day ago.
find /some/path -mtime -0  # Find files modified after 1 day ago.
find /some/path -mtime +1 -mtime -6 # Files modified between 2 and 7 days ago.
例如,假设今天是4月2日,你想要整个3月。您的$start将是31,而$end将是0

要在4月13日运行相同的报告,您的$start将为42,$end将为13。

您还可以使用-newerXY选项查找,直接搜索两个日期之间目录内和目录下的文件。日期格式可以包括保真度低至秒的时间,例如2017-04-13 21:35:58或通常为yyyy-mm-dd h:m:s

该选项的通用形式为-newerXY,其中XY可以是访问时间、B出生时间、c节点状态更改时间m修改时间和t中的一个,直接解释为时间

要在两个给定日期(如2016年11月)之间进行搜索,您可以使用类似于以下内容的查找形式:

find /path/to/files -type f -newermt "2016-10-30 23:59:59" \
! -newermt "2016-12-01 00:00:00"
将列出2016年10月底至2016年12月初之间的所有文件,例如2016年11月修改的所有文件,其中

-类型f将查找限制为“文件”而不是“文件和目录” -newermt 2016-10-30 23:59:59文件在10月份的最后一秒后被修改 ! -newermt 2016-12-01 00:00:00,在11月最后一秒后未修改 当然,\'只是一个行延续字符,用于在日期测试之间分割行,因此它不会在这个答案中生成水平滚动条-您可以忽略它并将所有内容放在一行上

如果需要计算文件数,只需将输出通过管道传输到wc-l,正如phatfingers在其前面的回答中所示。对文件进行日期排序的简单方法是使用find in command substitution作为ls-t的参数,以及您可能需要的ls的任何其他选项,例如:

$ ls -lrt $(find . -newermt 2016-10-30 ! -newermt 2016-12-01)
-rw-r--r-- 1 david david 3180 Nov  9 13:02 ./inventory2.c
-rw-r--r-- 1 david david  769 Nov 19 23:00 ./xfree.c
-rw-r--r-- 1 david david 1375 Nov 20 16:14 ./reallocprob.c
-rw-r--r-- 1 david david   98 Nov 21 00:39 ./hw.c
-rw-r--r-- 1 david david  530 Nov 25 23:10 ./tools2/tools.c
-rw-r--r-- 1 david david 1175 Nov 25 23:15 ./tools2/main.c
-rw-r--r-- 1 david david  174 Nov 25 23:16 ./tools2/tools.h
-rw-r--r-- 1 david david  424 Nov 26 00:28 ./tools/tsave.c
-rw-r--r-- 1 david david  106 Nov 26 01:34 ./tools/tools.h
-rw-r--r-- 1 david david  909 Nov 26 01:53 ./tools/main.c
-rw-r--r-- 1 david david  525 Nov 26 02:45 ./tools/tools.c
-rw-r--r-- 1 david david 1732 Nov 27 23:53 ./nogets.c
-rw-r--r-- 1 david david  530 Nov 30 22:17 ./resolution.c
您还可以使用-newerXY选项查找,直接在两个日期之间的目录内和目录下搜索文件。日期格式可以包括保真度低至秒的时间,例如2017-04-13 21:35:58或通常为yyyy-mm-dd h:m:s

该选项的通用形式为-newerXY,其中XY可以是访问时间、B出生时间、c节点状态更改时间m修改时间和t中的一个,直接解释为时间

要在两个给定日期(如2016年11月)之间进行搜索,您可以使用类似于以下内容的查找形式:

find /path/to/files -type f -newermt "2016-10-30 23:59:59" \
! -newermt "2016-12-01 00:00:00"
将列出2016年10月底至2016年12月初之间的所有文件,例如2016年11月修改的所有文件,其中

-类型f将查找限制为“文件”而不是“文件和目录” -newermt 2016-10-30 23:59:59文件在10月份的最后一秒后被修改 ! -newermt 2016-12-01 00:00:00,在11月最后一秒后未修改 当然,\'只是一个行延续字符,用于在日期测试之间分割行,因此它不会在这个答案中生成水平滚动条-您可以忽略它并将所有内容放在一行上

如果需要计算文件数,只需将输出通过管道传输到wc-l,正如phatfingers在其前面的回答中所示。对文件进行日期排序的简单方法是使用find in command substitution作为ls-t的参数,以及您可能需要的ls的任何其他选项,例如:

$ ls -lrt $(find . -newermt 2016-10-30 ! -newermt 2016-12-01)
-rw-r--r-- 1 david david 3180 Nov  9 13:02 ./inventory2.c
-rw-r--r-- 1 david david  769 Nov 19 23:00 ./xfree.c
-rw-r--r-- 1 david david 1375 Nov 20 16:14 ./reallocprob.c
-rw-r--r-- 1 david david   98 Nov 21 00:39 ./hw.c
-rw-r--r-- 1 david david  530 Nov 25 23:10 ./tools2/tools.c
-rw-r--r-- 1 david david 1175 Nov 25 23:15 ./tools2/main.c
-rw-r--r-- 1 david david  174 Nov 25 23:16 ./tools2/tools.h
-rw-r--r-- 1 david david  424 Nov 26 00:28 ./tools/tsave.c
-rw-r--r-- 1 david david  106 Nov 26 01:34 ./tools/tools.h
-rw-r--r-- 1 david david  909 Nov 26 01:53 ./tools/main.c
-rw-r--r-- 1 david david  525 Nov 26 02:45 ./tools/tools.c
-rw-r--r-- 1 david david 1732 Nov 27 23:53 ./nogets.c
-rw-r--r-- 1 david david  530 Nov 30 22:17 ./resolution.c

是当前目录的点吗?是的,如果你愿意,你可以给出一个固定的路径。我仍然不太明白如何将这个应用到我的困境中。。。我明天会回来查看并提供更多信息。太好了,这会让我知道我要去哪里,非常感谢!!是当前目录的点吗?是的,如果你愿意,你可以给出一个固定的路径。我仍然不太明白如何将这个应用到我的困境中。。。我明天会回来,提供更多
信息。太好了,这应该能让我到达我要去的地方,非常感谢!!