查找特定年份创建的目录中的文件数量

查找特定年份创建的目录中的文件数量

我想获取 2016 年创建的目录及其子目录(递归地)中的文件数量。我只关心具有特定文件结尾的文件,例如“.txt”。我怎样才能在终端中实现这一目标?

答案1

使用 GNU find

find /some/dir -type f -name '*.txt' -printf '%CY\n' | grep -Fxc 2016

ctime这将计算本地时区中带有 2016 年的文件。请注意,这ctime不是文件的创建时间,而是您可以使用标准 UNIX 语义期望的最佳近似时间。

如果你想匹配修改时间,你可以使用-printf '%TY\n'上面而不是-printf '%CY\n'

答案2

这是一种便携式方式,不需要GNUfind.

首先创建带有时间戳的文件

touch -t 201601010000 /tmp/2016 && touch -t 201701010000 /tmp/2017

然后执行。

find /some/path -type f -name '*.txt'  -newer /tmp/2016 ! -newer /tmp/2017

答案3

具有 GNU find和 on 系统和文件系统支持文件出生时间

find . -name '*.txt' -type f -newerBt 2016-01-01 \
                           ! -newerBt 2017-01-01 -printf . | wc -c

从技术上讲,这将排除在 2016-01-01 00:00:00.000000000 纳秒创建的文件,并包括 2017 年在该纳秒创建的文件(我不希望你的时钟有那么精确,或者无论如何它都很重要,但它可以例如,对于 cron 作业在 00:00:00 创建的文件,不支持亚秒时间戳的文件系统很重要)

如果您的系统不支持出生时间,您可以恢复到上次修改时间(无论如何这可能更好,因为出生时间是文件实例化的时间(不一定是该名称),而不是其中数据的时间这样写在实践中几乎没有什么意义),通过更改newerBtnewermt.

使用 BSD find(它们的-newerxy来源),您可以将其更改为:

find .//. -name '*.txt' -type f -newerBt 2016-01-01 \
                              ! -newerBt 2017-01-01 | grep -c //

相关内容