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

Emi*_*ile 1 linux bash grep date count

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

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

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

我了解一些 UNIX/Linux 基础知识,例如目录导航,了解一些 grep,但对 find 几乎一无所知。

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

ls -l |grep ...something something...
Run Code Online (Sandbox Code Playgroud)

可能有用,但我已经碰壁了。

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

Dav*_*ica 5

您还可以使用该-newerXY选项find直接搜索两个日期之间的目录内(及其下方)的文件。日期格式可以包括精确到秒的时间(例如"2017-04-13 21:35:58"或一般"yyyy-mm-dd h:m:s"

该选项的通用形式是-newerXY其中XY可以是a访问时间、B出生时间、cinode状态更改时间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"
Run Code Online (Sandbox Code Playgroud)

这将列出 2016 年 10 月末到 2016 年 12 月初之间的所有文件(例如 2016 年 11 月修改的所有文件),其中

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

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

如果您需要对文件进行计数,只需将输出通过管道传输到wc -lphatfingers 在他之前的答案中显示的那样。对文件进行日期排序的一种简单方法是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
Run Code Online (Sandbox Code Playgroud)