2013-11-27 8 views
19

私は、数TBのファイルがあるディレクトリを持っています。 14日以上経過したファイルをすべて削除したいと思います。bashとdeleteのX日より古いファイルを見つける

私はfind . -mtime +13 -deleteを使用すると考えました。コマンドが正常に動作するように、私はfind . -mtime +13 -exec /bin/ls -lh '{}' \; | grep '<today>'を実行しました。後者は何も返しません。今日作成/修正されたファイルはfindで見つからないはずです。-mtime +13を使用してください。しかし、驚いたことに、findは、今日変更/作成されたすべてのファイルのリストを吐き出すだけです!

+0

あなたや他の誰かがファイルを変更していませんか? –

+0

findについては、 '-daystart'オプションを参照してください。あなたの検索は正確に24 * 13時間後にカウントされ、24 * 13 - 1分後のファイルを残し、別の検索でそれらのファイルを見つけることができます。 –

+2

ちょっと分かりました!理由は 'ls'です。 'find'はmtime +13と' ls'のディレクトリを見つけて、ファイルが何mtime(facepalm! – user3040975

答えて

24
find your/folder -type f -mtime +13 -exec rm {} \; 
+6

スペースを含むファイル名では機能しません。 (GNU固有) 'find -delete'または' find -print0 | xargs -0 rm' – grebneke

+4

@grebneke:事例や事実を使ってあなたのステートメントをバックアップできますか? 'find'の' {} 'はファイル名のスペースや面白いシンボルに関して安全であることがよく知られています。 –

+1

これは、私のためにスペースのあるファイル名で動作します。redhat linux/bash。 – gaoithe

5

これは私のために働きます。

$ find ./folder_name/* -type f -mtime +13 -print | xargs rm -rf 
+3

'-r'スイッチは役に立たない。さらに、スペースやその他の面白いシンボルを含むファイル名があると、問題に遭遇します。あなたのユーティリティがそれらをサポートしているなら '-print0'と' xargs -0 ... 'を使ってください。さもなければ、@ Mindxの答えを使用してください。 'find ./folder_name -type f -mtime +13 -delete'のように' find'の '-delete'テストを使ってください。 –

+4

このコードスニペットは問題を解決するかもしれませんが、[説明を含む](http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers)は本当にあなたの投稿の質を向上させるのに役立ちます。将来読者の質問に答えていることを覚えていて、コード提案の理由を知らない人もいるかもしれません。 – gunr2171

関連する問題