一个 bash 脚本,它将目录中所有文件的创建时间与存储在变量中的时间戳进行比较

A bash script that will compare the creation time of all files in a directory to a timestamp stored in a variable

美好的一天。

我正在尝试创建一个 bash 脚本,它将目录中的所有文件与特定时间戳进行比较。此时间戳存储在变量中。如果文件创建日期与时间戳相差几秒,它将打印文件名。

似乎最适合的是 find 命令。到目前为止我已经尝试过:

find /directory/*.txt -type -f -newer $TimestampVariable
(with $TimestampVariable="Wed May 11 13:53:20 EDT 2022")

作为一个起点。但这不会起作用,因为它没有读取变量中的时间戳,也没有将它与 $TimestampVariable 和五秒后的时间范围进行比较。

对于 GNU 和 BSD find,您可以使用 -newerXY 谓词。

例如,如果您搜索在 Wed May 11 13:53:20 EDT 2022Wed May 11 13:53:25 EDT 2022 之间修改的所有文件,那么您可以这样做:

find . -type f -newermt 'Wed May 11 13:53:19 EDT 2022' -not -newermt 'Wed May 11 13:53:26 EDT 2022'

然后,给定以下格式的时间戳变量:

TimestampVariable="Wed May 11 13:53:20 EDT 2022"

以下是生成 -newerXY 谓词所需的两个日期的方法(我选择生成 ISO-8601 格式的日期,因为它得到了很好的支持)。

  • 于 Linux:
min=$(date -d "$TimestampVariable -1sec" --iso-8601=second)
max=$(date -d "$TimestampVariable +6sec" --iso-8601=second)
  • 在 macOS 上:
min=$(date -j -v'-1S' -f '%a %b %d %T %Z %Y' "$TimestampVariable" +%Y-%m-%dT%T%z)
max=$(date -j -v'+6S' -f '%a %b %d %T %Z %Y' "$TimestampVariable" +%Y-%m-%dT%T%z)

现在你可以做:

find . -type f -newermt "$min" -not -newermt "$max"