Linuxで検索

Linuxで検索

ディレクトリフォルダでMAIN.TXTファイルを探したいです。 24時間経過した場合は、MAIN.txtファイルにYESを出力します。 24時間以内に変更しないと、ファイルは保持されます。

私が今まで持っているもの:

find /directory -type f -mtime +1 -exec echo 'YES' > /directory/MAIN.txt \;

MAIN.TXTファイルは24時間より古いため、正常に動作します。これにより、MAIN.TXT モード時間が現在時刻に更新され、MAIN.txt ファイルに YES があります。

MAIN.TXTが24時間より新しい場合でも、MAIN.TXTは空のtxtに変更され、変更時間が変更されます。

条件が必要だということは分かりますが、それがどこへ行くのか理解できないようです。また、インストラクターはECHOパラメータに{}を言及しましたが、そうすると、AVAILABLEが追加されたファイル名が取得されます。

ベストアンサー1

Markの答えは、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です。
  • &&の論理演算子は、A && BAの終了状態がorの場合、Bが実行されることを反映します。したがって、実行がTRUEの場合、block2も実行されます。0TRUE[ block1 ]
  • block1の形で$( )。これはコマンドの置換です。角かっこ内のすべての内容が実行され、出力がコマンドを上書きします。これがまさに「コマンド置換」と呼ばれる理由です。
  • block1で置き換えられたcmdには検索ファイルが含まれています。
    • そのタイプはregular file
    • 名前付きMAIN.TXT
    • ディレクトリに/path/to/directory/.
    • 上記で指定したディレクトリレベルより低くない(-maxdepth 1
    • -mtime +1修正時間は、今日の時間()から少なくとも24時間()です-daystart-daystart検索していない場合、ファイルは24時間前に修正されましたが、それ以降昨日0時

おすすめ記事