[サーバー] ファイル数が多すぎて、ディレクトリを削除できない時の対処
こんにちは、@yoheiMuneです。
1つのフォルダに100万個以上のファイルがあるなど、多数のファイルがあると簡単にはディレクトリが消せません。そんな時に削除する方法をブログに書きたいと思います。
Wordpress上からそのプラグインを削除しようとしても、キャッシュファイル数が多すぎて削除できませんでした(正確に言うと削除処理で
一気にディレクトリごとは削除できないので、キャッシュファイルを少しずつ削除することにしました。その時に使ったコマンドを、ブログに書いておきたいと思います。
大量・巨大なファイル操作を低負荷で行う方法 - How old are you?
最後になりますが本ブログでは、サーバー、フロントエンド、Swift、PHP、Node.js、Python、Java、Linux、インフラ、Go言語、機械学習、などの技術トピックを発信をしていきます。「プログラミングで困ったその時の、解決の糸口に!」そんな目標でブログを書き続けています。ぜひ、本ブログのRSSやTwitterをフォローして貰えたら嬉しいです ^ ^
最後までご覧頂きましてありがとうございました!
1つのフォルダに100万個以上のファイルがあるなど、多数のファイルがあると簡単にはディレクトリが消せません。そんな時に削除する方法をブログに書きたいと思います。
目次
どんな問題か
Wordpressの「WP File Cache」というキャッシュに関するプラグインを使っていて問題が起きました。そのプラグインが生成するキャッシュファイル数が多すぎて、サクラのレンタルサーバーのファイル数上限に引っかかり、その影響でメール受信ができなくなる(=メール受信時にファイルを作成できない)という問題です。Wordpress上からそのプラグインを削除しようとしても、キャッシュファイル数が多すぎて削除できませんでした(正確に言うと削除処理で
rm
コマンドは動くのですが、サクラのレンタルサーバーの制約上、連続したプログラム実行は1時間程度でKillされます。1時間でrm
が終わらないので削除できないという問題になりました)。一気にディレクトリごとは削除できないので、キャッシュファイルを少しずつ削除することにしました。その時に使ったコマンドを、ブログに書いておきたいと思います。
ファイル数を確認する
ディレクトリ内にあるファイルの数を確認するには、以下のコマンドを実行します。$ ls -lf [パス] | wc -l 1054394 # ls -lf : 対象パス内のファイル一覧を表示 # 「-l」で1ファイルを1行で表示 # 「-f」でソートせずに表示 # # wc -l : 出力された行数をカウント # 「-l」で行数のみを表示何個か怪しいディレクトリをチェックしたところ、100万ファイルほどあるフォルダが2つあることがわかりました。
ファイルを少しずつ削除する方法
find
コマンドと、そのコマンドのオプションで-delete
オプションを利用します。$ find [ワードプレスのインストールディレクトリ]/wp-content/plugins/wp-file-cache/cache/terms \ -exec sleep 0.1 \; \ -delete -print # find [パス] : 対象のパス以下にあるファイルを取得する # -exec sleep 0.1 \; : 1ファイルごとに、0.1秒スリープ # -delete : ファイルを削除する # -print : 処理対象のファイルパスを出力するここでは1ファイルごとに0.1秒スリープすることで、サーバーに負荷をかけないようにしています。また
-print
オプションを付与することで、現在削除しているファイルがわかるようにしています。つぶやき
上のコマンドでちょっとずつ削除できるのですが、上記のコマンドも1時間ほどするとKillされてしまいます(サクラのレンタルサーバーの制約より)。そのため、cronで1時間ごとに起動するようにしてちょっとずつ削除しました。3日ほどで全てのキャッシュファイルを削除する事ができました。参考資料
下記のページが非常に参考になりました。今回の大量ファイル以外にも、大きなサイズのファイル削除など、いくつか他にも役立つ事例が掲載されています。大量・巨大なファイル操作を低負荷で行う方法 - How old are you?
最後に
今回は急遽相談を頂いたのですが、エンジニアをしているといろいろな問題に取り組めるので、楽しいですね。今回の件で、Wordpressのキャッシュ系のプラグインは要注意ということがわかりました(笑)。最後になりますが本ブログでは、サーバー、フロントエンド、Swift、PHP、Node.js、Python、Java、Linux、インフラ、Go言語、機械学習、などの技術トピックを発信をしていきます。「プログラミングで困ったその時の、解決の糸口に!」そんな目標でブログを書き続けています。ぜひ、本ブログのRSSやTwitterをフォローして貰えたら嬉しいです ^ ^
最後までご覧頂きましてありがとうございました!