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



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

  1. 将 3 月份的文件复制到我的本地目录 (Windows)
  2. 按名称排序,如有必要,删除我不需要计数的文件(从我的本地)
  3. 选择所有或特定文件,查看总数,然后将其输入到我维护的电子表格中。

该电子表格用于每月报告可交付成果...

我知道一些 unix/linux 基础知识,比如目录导航,一些关于 grep,几乎没有关于查找的内容。

我不知道如何在目录中搜索特定日期范围内的文件,按月,并计算有多少文件......有时具有特定名称或扩展名。 我以为

ls -l |grep ...something something...

也许有效,但我碰壁了。

如果需要更多信息,请告诉我,对不起,太罗嗦了。

您还可以使用-newerXY选项find直接在两个日期之间的目录中(和下方)搜索文件。日期格式可以包括保真度低至秒的时间(例如"2017-04-13 21:35:58"或一般"yyyy-mm-dd h:m:s")

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

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

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 月修改的所有文件),其中

  • -type f将查找限制为"文件"而不是"文件和目录">
  • -newermt "2016-10-30 23:59:59"10 月最后一秒后修改的文件
  • ! -newermt "2016-12-01 00:00:00",并且在 11 月的最后一秒后未修改

当然,''只是一个行连续符,用于在日期测试之间拆分行,因此它不会在此答案中生成水平滚动条——您可以省略它并将所有内容放在一行上。

如果您需要计算文件,只需将输出通过管道传输到wc -l,如 phatfingers 在他之前的答案中所示。对文件进行日期排序的一种简单方法是简单地在命令替换中使用find作为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

您可以使用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

最新更新