Linux
使用 Linux 查找
我想在目錄文件夾中找到 MAIN.TXT 文件。如果它早於 24 小時,則將 YES 輸出到 MAIN.txt 文件。如果它在 24 小時內沒有被修改,那麼不要理會該文件。
我做到了這一點:
find /directory -type f -mtime +1 -exec echo 'YES' > /directory/MAIN.txt \;
MAIN.TXT 文件超過 24 小時,因此可以正常工作。這會將 MAIN.TXT 模式時間更新為目前時間,並且我的 MAIN.txt 文件中包含 YES。
如果 MAIN.TXT 比 24 小時新,它仍然用空白 txt 修改 MAIN.TXT 並更改修改時間。
我知道我需要一個條件,但我似乎無法得到它的去向。此外,我的導師為我的 ECHO 參數提到了 {},但如果我這樣做,我會得到附加了 AVAILABLE 的文件名。
馬克的回答似乎有點不符合 OP 的要求。
在您的終端提示符下嘗試這一個班輪。它更簡單,可能更健壯。
[ $(find /path/to/directory/. -maxdepth 1 -type f -name MAIN.TXT -daystart -mtime +1) ] \ && printf "YES" > /full/path/to/directory/MAIN.TXT
解釋一下,首先查看一個班輪的較大塊,然後進入每個塊:
一個班輪作為形式
[ block1 ] && block2
構造
[ block1 ]
(帶空格!)是等效於test
內置的布爾邏輯運算符。如果 block1 的執行返回一些東西(任何東西),那麼結果
[ block1 ]
是 TRUE。如果它沒有返回任何內容,如 中""
,則之前的測試結果為 FALSE。邏輯運算符
&&
in反映瞭如果 A 的退出狀態為或A && B
,則執行 B 的事實。所以如果執行為 TRUE,那麼 block2 也會被執行。0``TRUE``[ block1 ]
block1 作為形式
$( )
。這是一個命令替換。括號內的所有內容都會被執行,並且輸出會替換命令。這就是它被稱為“命令替換”的原因。在 block1 中,被替換的 cmd 包括找到一個文件:
- 誰的類型是
regular file
- 命名為
MAIN.TXT
- 目錄裡面
/path/to/directory/.
- 不低於上面指定的目錄級別 (
-maxdepth 1
)-mtime +1
從今天的時間 ( ) 開始,其修改時間至少為 24 小時 (-daystart
)。如果沒有-daystart
您的搜尋,將查找 24 小時前修改過的文件,但從昨天的 0 小時時間開始倒數。