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 {} +

答え2

別のオプションは、コマンド出力をパイプし、findxargsを使用して削除することです。

find /var/dtpdev/tmp/ -type f -mtime +15 | xargs rm

しかし、ジェーンの賛成投票の回答は、この回答よりもまだ有効です。

答え3

努力する:

find /path/to/files/  -cmin +240  -type f -name *.php  -delete

または

find /path/to/files/ -type f -name *.php  -mtime +30 -exec rm {} \;

1つ目は組み込みの削除機能を使用して4時間以上のファイルを削除しfind、2つ目はrminside句を使用して30日以上のファイルを削除します-exec

答え4

いいね

rm -rf `find yadi` 

単純さによるものです。そのバックティックは「私を最初に処刑しなさい」と言います。だからあなたはrm -rfそれらの間の結果に対抗して戦っています。

関連情報