Linux

使用 Linux 查找

  • March 15, 2019

我想在目錄文件夾中找到 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 小時時間開始倒數。

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