web-dev-qa-db-ja.com

X時間以上経過したファイルを削除する方法

古いファイルを削除する必要があるbashスクリプトを書いています。

現在、以下を使用して実装されています。

find $LOCATION -name $REQUIRED_FILES -type f -mtime +1 -delete

これにより、1日より古いファイルが削除されます。

ただし、1日よりも細かい解像度が必要な場合(6時間前など)はどうなりますか? findや-mtimeを使用しているように、すてきな方法がありますか?

180
Tom Feiner

find には-mminオプションがありますか?これにより、最後の変更以降の最小数をテストできます。

find $LOCATION -name $REQUIRED_FILES -type f -mmin +360 -delete

または、 tmpwatch を使用して同じジョブを実行することもできます。 phjrは、コメントで tmpreaper も推奨しています。

281
Paul Dixon

このトリックを行うには、1時間前にファイルを作成し、-newer file引数を使用します。

(または、touch -tを使用してこのようなファイルを作成します)。

9
xtofl

ここに私のために働いたアプローチがあります(そして、私はそれが上で使用されているのを見ません)

$ find /path/to/the/folder -name *.* -mmin +59 -delete > /dev/null

フォルダをそのままにして、59分以上経過したすべてのファイルを削除します。

2
Axel Ronsin

SunOS 5.10の場合

 Example 6 Selecting a File Using 24-hour Mode


 The descriptions of -atime, -ctime, and -mtime use the  ter-
 minology n ``24-hour periods''. For example, a file accessed
 at 23:59 is selected by:


   example% find . -atime -1 -print




 at 00:01 the next day (less than 24 hours  later,  not  more
 than one day ago). The midnight boundary between days has no
 effect on the 24-hour calculation.
1
Rajeev Rumale

@iconoclastが comment で別の答えについて疑問に思っていた方法を実行するためにできることを次に示します。

ユーザーのcrontabまたは/etc/crontabを使用してファイル/tmp/hourを作成します。

# m h dom mon dow user  command
0 * * * * root /usr/bin/touch /tmp/hour > /dev/null 2>&1

次に、これを使用してコマンドを実行します。

find /tmp/ -daystart -maxdepth 1 -not -newer /tmp/hour -type f -name "for_one_hour_files*" -exec do_something {} \;
0
satyr0909

「find」のバージョンに「-mmin」がない場合、「-mtime -0.041667」は「過去1時間以内」にかなり近いため、次のように使用します。

-mtime +(X * 0.041667)

したがって、Xが6時間を意味する場合、次のようになります。

find . -mtime +0.25 -ls

24時間* 0.25 = 6時間なので動作します

0

find $PATH -name $log_prefix"*"$log_ext -mmin +$num_mins -exec rm -f {} \;

0
Eragonz91

-mminは分単位です。

マニュアルページを見てみてください。

man find

より多くのタイプ。

0
GavinCattell