回答:
私tmpwatch
はこれらのものに使用するのが好きです。これは、ファイルが最後に変更されたときのためのものです。それはシンプルで、多くの場合にうまく機能します:
tmpwatch -m 720 /path/to/cache
Ubuntuの場合は、tmpreaper
代わりに確認してください。
ファイルが最後にアクセスされた時刻を確認したい場合は、以下を使用します。
tmpwatch -a 720 /path/to/cache
noatimeでマウントされたファイルシステムでtmpwatch -aを使用することはできません。引き続き-mを使用できます
Ubuntu 10.04.2 LTS
て、そのコマンドが存在しません...
tmpreaper
代わりに@Kristianを確認してください。
上記をniceで実行してみてください:
nice -n 39 find cache* -mtime +30 -exec rm -f {} ';'
この方法では、他に何も実行する必要がない場合にのみ巨大な負荷が発生します。それ以外の場合は、他のプロセスが優先されます(そのナイスネスが19未満、つまり最大の場合)。
-nオプションの引数は-20から19までのデフォルトのnicenessに追加されることに注意してください。元のnicenessに関係なく、非常に nice になるように 39を使用しました。
chiborgがコメントしたように、ロードは、見つかったすべてのファイルに対してrmを開始するためです。がtmpwatch
代替案として提案されている答えに気づきましたが、それはきっとうまくいきます。ただし、必須ではありません。
検索は、見つかったファイルを次のように引数のリストに蓄積するように指示すると、execに指定されたコマンドを1回実行できます。
find /path -name "*.moo" -exec rm {} \+
引数リストがシェル(getconf ARG_MAX)で許可されている最大値(バイト単位)より大きくなる可能性があるため、これが機能しないことがあります。これは、-Lオプションを指定したxargsで解決できます。
この例を考えてみましょう:
$ echo 0 > /tmp/it;
$ for i in {0..15000};do echo $i;done |\
xargs --no-run-if-empty -L 5000 ./tmp/xr.sh
Iteration=0; running with 5000 arguments
Iteration=1; running with 5000 arguments
Iteration=2; running with 5000 arguments
Iteration=3; running with 1 arguments
$ cat tmp/xr.sh
#!/bin/sh
IT=`cat /tmp/it`
echo Iteration=$IT\; running with $# arguments
let IT=IT+1
echo $IT > /tmp/it
したがって、追加のソフトウェアをインストールする必要はありません。必要なのはgnu-findutilsだけです。
find /path -mtime +30 -print0 | xargs -0 -L 5000 rm
\+
。無地+
で十分です。(2)これは、「引数リストが大きくなる可能性があるため、機能しない...」ではありません。 find … -exec … {} +
同じことをxargs
行います。必要なだけコマンドを実行します。たとえば、(例のように)15001から20000までのファイルがある場合find
、-exec
'dプログラム(rm
)は4回実行されます。
cache*
が多くのファイルに展開される場合は、find . -name 'cache*' -mtime +30 -exec rm {} \;
代わりに次のようなものを試してください。