Shell

查找在特定文件創建之後或之前某個時間創建的文件

  • December 10, 2016

我需要一個 shell 腳本來查找在創建特定文件 ( test.txt) 之前 1 小時或之後 1 小時創建的文件。

如果我選擇find -newer,這意味著我必須創建一個臨時文件,用於touch更改文件創建時間前 1 小時的時間test.txt,然後用於-newer tempFile查找比 更新的文件tempFile,最終找到在 test.txt 文件之前 1 小時創建的文件。然後我必須返回該過程以找到比我感興趣的文件一個小時或更長時間的文件。回答一個簡單的問題似乎需要做很多額外的工作。

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

還有其他建議嗎?

另一個複雜的選擇:

  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"

它查找所有修改時間小於“之前的 delta”分鐘和大於“之後的 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"

試試下面的 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

引用自:https://unix.stackexchange.com/questions/50108