コマンド:ログファイルの検索と削除 - 詳細な説明

コマンド:ログファイルの検索と削除 - 詳細な説明
find $LOG_PATH -type f -mtime +60 -print -exec rm {} \;

上記のコマンドはログファイルを削除します。各コマンドのドキュメントを読みましたが、よく理解していません。

これを簡単な説明で説明できる人はいますか?

ありがとうございます!

答え1

コマンドを理解するために、まずマニュアルを読んでくれてありがとう。コマンドの各部分を参照して、コマンドがどのように機能するかを説明したいと思います。マニュアルはこちら

このコマンドは主に次のタスクを実行します。 1)$ LOG_PATH変数で指定されたパス内で60日前に変更された一般ファイルを検索します。 2)各有効な結果に対してファイル名を印刷し、ファイルに対してrmコマンドを実行します。

詳細な履歴は次のとおりです。 findコマンドの基本的な構文は次のとおりです(明確にするために、いくつかの高度なオプションは省略されています)。

find [starting-point...] [expression]

始点は、/home や document/ などのパスです。このマニュアルには次のように記載されています。

GNU findは与えられた式を左から右に評価し、優先順位ルールに従って与えられた各始点にルートを持つディレクトリツリーを検索します。

あなたの場合、始点は$ LOG_PATH変数で指定されます。この変数には有効なパス値を含める必要があります。

findはファイルを見つける場所を知っているので、次のステップは与えられた式を評価することです。もう一度マニュアルに戻ります。

始点リストの後のコマンドライン部分は式です。これは、ファイルのマッチング方法と一致したファイルの処理方法を説明するクエリ仕様です。

単純化のために、コマンドに表示される2つのタイプの式であるテストとタスクを考えてみましょう。

テストは通常​​、検討中のファイルの一部のプロパティに基づいて真または偽の値を返します。

ジョブには副作用(標準出力に何かを印刷する)があり、通常成功したかどうかに応じてtrueまたはfalseを返します。

この場合、テストは-type f合計式-mtime +60です。この-typeテストでは、ファイルが特定の種類であることを確認します。-type fそのファイルが通常のファイルであることを確認してください。その他のバリエーションには、-type dディレクトリの確認と-type lシンボリックリンクの検索が含まれます。

テストは-mtime +60少し複雑です。ファイルのデータ/内容が変更されてから60日が経過したことを確認してください。これには複雑な問題があります。find編集時間の計算に関連する部分を無視してください。したがって、このテストに合格するには、実際にファイルを61 * 24時間前に変更する必要があります。時間は、カレンダー日付ではなくコマンドが実行された時間から計算されます。

コマンドの次の式findはアクションです-print。これにより、パス-printしてテストした各ファイルのファイル名が標準出力(1行に1つのファイル)として印刷されます。これは、デフォルトで指定されたテスト基準を通過するファイルのリストと呼ばれる結果を提供します。-type-mtimefind

コマンドの最後の部分findも作業です-exec。これ-execにより、結果ごとに指定されたコマンドが実行されますfind。あなたの場合、これはrmファイルを削除するコマンドです。中括弧({})は、ファイル名を置き換える場所を指定します。これにより、次の形式のコマンドが生成されますrm /path/to/target/file。末尾のセミコロンは、-exec指定されたコマンドが一致する各ファイルに対して一度実行されることを指定します。セミコロンもシェルの特殊文字なので、前にバックスラッシュを追加するとエスケープできます。

答え2

$LOG_PATH検索するパスを含めることができる変数(例:/home/folder1/folder2`)。

-type f:フォルダやその他のファイルは検索せず、ファイルのみを検索

-mtime:最後に修正されてから60日を超えました。

-print:このコマンドの出力を印刷します。明示的に指定しない場合は、デフォルト値を使用する必要があります。

-exec rm {} \; :結果の各行でコマンドを実行します。改行で区切られます(実際には、コマンドで見つかった各ファイルで)。\;これは、そのファイルを削除するために必要です。

関連情報