1. 概要

ワークステーションまたはサーバー上のファイルを整理する必要があることがよくあります。 当社のアプリケーションは、ログまたは一時ファイルを生成する場合があります。 一般的な使用例の1つは、特定の年齢を超えるファイルを削除することです。

このチュートリアルでは、Linuxで年齢別にファイルを削除する方法を見ていきます。これらのコマンドは他のPOSIXシェルでも機能する可能性があります。

2. ファイルの検索と削除

削除アクションを適用するには、基準に一致するファイルを見つける必要があります。

このため、 findコマンドを使用します。 The 探すコマンドは、使用できる削除機能も提供します。

2.1. X分より古いファイルを削除する

find を使用して、ファイル名が access で始まり、 .log で終わり、が15分より古いファイルを削除することから始めましょう。[ X163X]

find . -name "access*.log" -type f -mmin +15 -delete

このコマンドがどのように構成されているかを詳しく見てみましょう。

まず、ファイル検索の開始点を指定しました。これは現在の作業ディレクトリ「。」です。

次に、ファイル名の基準の前に-nameスイッチを付けます。

スイッチ-タイプfは、ファイルのみを検索することを意味します。

-mmin は変更時刻を表し、 +15 は、15分前またはそれ以前に最後に変更されたファイルが必要であることを意味します。

アクションフラグ-deleteは、findに検出したすべてのファイルを削除するように要求します。 これは、現在の作業ディレクトリから開始して、ファイルシステム階層を再帰的に調べます。

2.2. X日より古いファイルを削除する

find コマンドを少し変更するだけで、数分から数日に切り替えることができます。

find . -name "access*.log" -type f -mtime +5 -delete

ここで、 -mtime スイッチは、少なくとも5日前に変更されたファイルを削除することを示しています。

2.3. 古いバージョンのfindを使用してX日より古いファイルを削除する

古いディストリビューションを使用すると、検索ツールに-deleteスイッチがない可能性があります。

この場合、別の方法があります。

find . -name "access*log" -exec rm {} \;

このバージョンでは、 -exec スイッチを使用すると、見つかった各ファイルでrmコマンドを使用できます。

2.4. プロンプトを表示してX日より古いファイルを削除する

誤って作成された削除コマンドが間違ったファイルを削除してしまう可能性があるのではないかと心配するかもしれません。 上記のコマンドの小さなバリエーションは、削除する前にプロンプトを表示します。

-iスイッチをrmコマンドに追加しましょう。

find . -name "access*log" -exec rm -i {} \;

このようにして、どのファイルを削除するかを決定できます。

3. 偶発的なファイル削除の回避

ファイルの削除はかなり簡単ですが、find述語に一致するすべてのファイルに対して実行していることを覚えておく必要があります。 これは、単純なタイプミスまたはコマンドラインスイッチの予期しない順序により、予期しない損傷が発生する可能性があることを意味します

例として、次のコマンドを見てみましょう。

find . -delete -name file.txt

これにより、現在の作業ディレクトリからfile.txtのみが削除されると想定される場合があります。 ただし、 -delete スイッチが最初に来るため、-nameは無視されます。 この間違いにより、現在のディレクトリ内のすべてが削除されます!

findで削除する際の安全性を向上させるために従う必要のある一般的なルールは次のとおりです。

  • find コマンドをプレビューして、-deleteスイッチなしで実行して正しいことを確認します。
  • 常にをチェックしてください-deleteオプションはfind引数の最後にあります
  • どうしても必要な場合を除いて、rootユーザーとしてファイルを削除しないでください

4. 概要

このチュートリアルでは、一定期間より古いファイルを削除する方法について説明しました。

次に、特定のスイッチが必要な順序から外れている場合に何がうまくいかないかを調べました。

最後に、システムでこのようなコマンドを実行するときに従う必要のある一般的なルールについて簡単に説明しました。

find コマンドは非常に便利で、多くの追加スイッチがあります。 man findまたはfind–helpを使用して、詳細を確認できます。