Unixで特定の日付より古いファイルを見つけて削除する方法は?

Unixで特定の日付より古いファイルを見つけて削除する方法は?

7つのフォルダを含むログフォルダがあります。これら7つのフォルダの中にはサブフォルダもあり、これらのサブフォルダにもサブフォルダがあります。フォルダ構造、つまりファイルに影響を与えることなく、すべてのフォルダ(サブフォルダを含む)から15日以上経過したすべてのファイルを削除したいと思います。

mahesh@inl00720:/var/dtpdev/tmp/ > ls
A1  A2  A3  A4  A5  A6  A7

mahesh@inl00720:/var/dtpdev/tmp/A1/ > ls
B1 B2 B3 B4 file1.txt file2.csv

ベストアンサー1

次のように起動できますfind /var/dtpdev/tmp/ -type f -mtime +15。その後、15日より古いすべてのファイルを見つけて名前を印刷します。あるいは、コマンドの最後に指定することもできますが、-printこれはデフォルトのアクションです。どのファイルが選択されているかを確認するには、まず上記のコマンドを実行することをお勧めします。

findコマンドが削除したいファイル(他のファイルを除く)を一覧表示していることを確認したら、そのファイルを削除するアクションを追加できます。このための一般的な措置は次のとおりです。

  1. -exec rm -f {} \;(または同等に-exec rm -f {} ';'
    これはrm -f各ファイルで実行されます。たとえば、次のようになります。

    rm -f /var/dtpdev/tmp/A1/B1; rm -f /var/dtpdev/tmp/A1/B2; rm -f /var/dtpdev/tmp/A1/B3; …
    
  2. -exec rm -f {} +
    たとえば、これはrm -f複数のファイルで同時に実行されます。

    rm -f /var/dtpdev/tmp/A1/B1 /var/dtpdev/tmp/A1/B2 /var/dtpdev/tmp/A1/B3 …
    

    したがって、オプション 1 よりも少し速い場合があります。 (何千ものファイルがある場合は、このタスクをrm -f複数回実行する必要があるかもしれません。)

  3. -delete
    これはfind実行せずにファイルを削除するように指示しますrm。これはバリアントよりはるかに高速ですが、-execすべてのシステムで動作するわけではありません。

したがって、オプション2を使用すると、コマンド全体は次のようになります。

find /var/dtpdev/tmp/ -type f -mtime +15 -exec rm -f {} +

おすすめ記事