一个 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 2022
和 Wed 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"
美好的一天。
我正在尝试创建一个 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 2022
和 Wed 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"