特定のフォルダ内で30日以上経過したファイルを検索するスクリプトを作成中です。要件に基づいて、拡張子が。ログまたは。外サブディレクトリをスキップします。
以下のコマンドは、30 日前に変更されたすべての .log* ファイルを返します。ただし、最近のものも含め、すべての .out ファイルを返します。以下のコードに何か問題がありますか?
find -maxdepth 1 -mtime +30 -type f -name "*.log*" -o -name "*.out*"
上記の記述のどこが間違っているのか教えていただけますか
答え1
試す:
find -maxdepth 1 -mtime +30 -type f \( -name "*.log*" -o -name "*.out*" \)
問題は、find
論理 AND が論理 OR よりも強く結合されることです。括弧はそれを阻止します。
括弧なしでは、find
一致するファイルを検索しますどちらか(ア)-mtime +30 -type f -name "*.log*"
または(b)-name "*.out*"
.
括弧で囲むと、find
(a)に一致するファイルを検索します-mtime +30 -type f
そして(b) または-name "*.log*"
のいずれかに一致します-name "*.out*"
。