0

数を超えたときにディレクトリ内のすべてのファイルを削除する cron ジョブを実行したいと考えています。

たとえば1000ファイルになったら、そのディレクトリ内のすべてのファイルを削除します。

目標は、キャッシュ ディレクトリをクリアすることです。

4

3 に答える 3

2
#!/bin/bash
CACHE_DIR=/home/cache
if [[ `ls -al $CACHE_DIR | wc -l` -ge 1000 ]] ; then 
     find $CACHE_DIR -t file -exec rm -f {} \; 
fi;

ファイル数が 1000 以上の場合は、/home/cache 内の通常のファイルをすべて削除します。

于 2013-01-30T10:32:55.753 に答える
1

すべてのファイルを削除する代わりに、一般的な LRU (Least Recent Used) キャッシュは、最近使用されていない古いエントリを削除し、最近使用されたエントリを保持します。

ls -ut1 | tail -n+1001 | xargs -n 50 rm 

これにより、ディレクトリ内のすべてのファイルがアクセス時間順に並べ替えられ、最近アクセスされたファイルが一番下になります。Tail は上位 1000 個を省略し、残りを「xargs rm」に送信して em を削除します。ファイル名が長く、1 つのコマンドの長さが ARG_MAX を超える場合は、xargs の「-n 50」オプションが必要になることがあります。

ファイル数が 1000 未満の場合、「xargs rm」でエラーが発生します。それを片付けるために。

ls -ut1 | tail -n+1001 > /tmp/files$$
if [[ `cat /tmp/files$$ | wc -l` -ge 1001 ]] ; then
  while read line ; do
    rm "$line"
  done < /tmp/files$$
fi
rm /tmp/file$$
于 2013-09-30T16:33:29.393 に答える