2011-06-30 11 views
28

私はUNIXのfindコマンドのために、このオプションがあると知っている:UNIX find:-newerオプションの反対側に存在しますか?

find -version 
GNU find version 4.1 

    -newer file Compares the modification date of the found file with that of 
     the file given. This matches if someone has modified the found 
     file more recently than file. 

は私が特定のファイルより古いファイルを検索できるようになるオプションがあります。私は、ディレクトリからクリーンアップのためにすべてのファイルを削除したいと思います。だから、N日以上のすべてのファイルが見つかる代替案も、その仕事をするでしょう。あなたはもっとして7日前に使用して、最後に変更されたファイルを検索したい場合は

find . \! -newer filename 

答えて

32

あなたはこのよう-newer操作を否定する!を使用することができます

find . -mtime +7 

を更新:

ファイルの照合を避けるには、次のように比較してください。

find . \! -newer filename \! -samefile filename 
+1

このロジックは、 "等しいか古い"であることに注意することが重要です。したがって、参照ファイルがパスに含まれていると、参照ファイルが含まれます。より良い解決法については、下記のmartyの答えをご覧ください。 – swdev

+0

Martyの答えは、テストファイルと同じ名前のファイルのマッチングも防ぎます。私はテストされているファイルを除外するtestで私の答えを更新しました。 – qbert220

6

あなただけの否定を使用することができます。

find ... \! -newer <reference> 

また、オプションの-mtime/-atime/-ctime/-Btime家族を試してみてください。私はすぐに働く方法を覚えていませんが、この状況では役に立つかもしれません。

find操作(特にルートとして実行中の操作)からファイルを削除することに注意してください。権限のない悪意のあるプロセスが、同じシステム上で、削除したくないものを削除することを欺くことができます。 GNU find manualの "Deleting Files"セクション全体を読むことを強くお勧めします。

2

新しい手段「の古いまたは同じタイムスタンプ」の否定ことに、注意してください:あなたはこの例で見たよう

は、同じファイルも返されます。

[email protected]:/home/thomas/tmp/ touch test 
[email protected]:/home/thomas/tmp/ find ./ ! -newer test 
./test 
4

あなたはファイルのみが必要な場合ファイル「foo」というより古いと自分自身を狛犬ないこと、否定を使用して名前のファイルを除外:

find . ! -newer foo ! -name foo 
1

残念ながら、この をサポートdoesntの発見! - それ以上の意味はありません。これは新しいものではないことを意味しますが、変更時間が等しいファイルにも一致します。だから私はむしろ使用する

for f in path/files/etc/*; do 
    [ $f -ot reference_file ] && { 
     echo "$f is older" 
     # do something 
    } 
done 
関連する問題