Shell
查找在特定文件創建之後或之前某個時間創建的文件
我需要一個 shell 腳本來查找在創建特定文件 (
test.txt
) 之前 1 小時或之後 1 小時創建的文件。如果我選擇
find -newer
,這意味著我必須創建一個臨時文件,用於touch
更改文件創建時間前 1 小時的時間test.txt
,然後用於-newer tempFile
查找比 更新的文件tempFile
,最終找到在 test.txt 文件之前 1 小時創建的文件。然後我必須返回該過程以找到比我感興趣的文件早一個小時或更長時間的文件。回答一個簡單的問題似乎需要做很多額外的工作。我也看到
find -mmin
了,但我擔心它是 POSIX 的擴展find
。還有其他建議嗎?
另一個複雜的選擇:
- get
test.txt
的修改時間 (mtime
)- 計算
"before delta" = now + hour - mtime
(假設mtime
是過去)- 計算
"after delta" = now - hour - mtime if now - mtime > hour else 0
- 跑步
find -type f -mmin -"before delta" -mmin +"after delta"
它查找所有修改時間小於“之前的 delta”分鐘和大於“之後的 delta”分鐘前的文件,即 +/- 小時
test.txt
的修改時間。如果在一條線上畫
now
,mtime
,"before"
,次可能更容易理解。"after"
date
命令允許獲取now
和mtime
。作為一個單行:
$ 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