ディレクトリフォルダで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 && B
Aの終了状態がorの場合、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時。
- そのタイプは
答え2
[ $(find /directory -type f -mtime +1 | wc -l) -gt 0 ] && echo 'YES' > /directory/MAIN.txt