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
-mtime
find
コマンドの最後の部分find
も作業です-exec
。これ-exec
により、結果ごとに指定されたコマンドが実行されますfind
。あなたの場合、これはrm
ファイルを削除するコマンドです。中括弧({}
)は、ファイル名を置き換える場所を指定します。これにより、次の形式のコマンドが生成されますrm /path/to/target/file
。末尾のセミコロンは、-exec
指定されたコマンドが一致する各ファイルに対して一度実行されることを指定します。セミコロンもシェルの特殊文字なので、前にバックスラッシュを追加するとエスケープできます。
答え2
$LOG_PATH
検索するパスを含めることができる変数(例:/home/folder1/folder2`)。
-type f
:フォルダやその他のファイルは検索せず、ファイルのみを検索
-mtime
:最後に修正されてから60日を超えました。
-print
:このコマンドの出力を印刷します。明示的に指定しない場合は、デフォルト値を使用する必要があります。
-exec rm {} \;
:結果の各行でコマンドを実行します。改行で区切られます(実際には、コマンドで見つかった各ファイルで)。\;
これは、そのファイルを削除するために必要です。