查找在创建特定文件之后或之前特定时间创建的文件

oma*_*oum 6 shell find shell-script date

我需要一个 shell 脚本来查找在创建特定文件 ( test.txt)之前 1 小时或之后 1 小时创建的文件。

如果我使用find -newer,那意味着我必须创建一个临时文件,用于touch更改test.txt文件创建时间前 1 小时的时间,然后用于-newer tempFile查找比 更新的文件tempFile,最终找到在 test.txt 文件之前 1 小时创建的文件。然后我必须返回该过程以找到比我感兴趣的文件一个小时或更长时间的文件。这似乎需要做很多额外的工作来回答一个简单的问题。

我也看到了find -mmin,但我担心它是 POSIX 的扩展find

还有其他建议吗?

Gil*_*not 5

尝试以下 shell 代码:

file=</PATH/TO/FILE>
date=$(perl -le '$s = (stat($ARGV[0]))[9]; print $s;' "$file")
now=$(date +%s)
seconds=$((now - date))
mins=$((seconds / 60))
find . -mmin -$((mins + 60 )) -mmin +$((mins - 60)) -print
Run Code Online (Sandbox Code Playgroud)


jfs*_*jfs 4

另一个复杂的选项:

  1. gettest.txt的修改时间 ( mtime)
  2. 计算"before delta" = now + hour - mtime(假设mtime是过去的)
  3. 计算"after delta" = now - hour - mtime if now - mtime > hour else 0
  4. 跑步find -type f -mmin -"before delta" -mmin +"after delta"

它找到所有在“增量之前”分钟之前修改的文件,以及在修改时间大于“增量之后”分钟之前修改的所有文件,即test.txt修改时间+/-小时左右。

如果把now, mtime, "before","after"次画在一条线上,可能会更容易理解。

date命令允许获取nowmtime

作为单行:

$ find -type f -newermt "$(date -r $file) -1 hour" -a \
            \! -newermt "$(date -r $file) +1 hour"
Run Code Online (Sandbox Code Playgroud)