clock-up-blog

go-mi-tech

find で見つけたディレクトリ群の総容量の計算、あと一括削除

Bash を使う前提で話します。とは言っても僕は Windows 使いなので Git Bash なんですけど。

ディスク容量が厳しくなってきたときに容量を確保する Tips です。

主にプロジェクト単位で容量を食ってそうなディレクト

この記事の読者はプログラマであることを想定しています。つまりプロジェクトを量産していることを前提に話します。

だいたいの場合、プロジェクト毎に容量を食うディレクトリ名というのは決まっているので、このあたりは雰囲気で良いので「勘」を掴んでおきましょう。地道に容量測定しても良いですが、ディレクトリ名に対する感覚を普段から養っておくほうが実用上は捗ることが多いです。

例えば僕は Visual Studio での C++ / C# 使いなので「Debug」「Release」「obj」「packages」あたりのディレクトリがプロジェクト毎に生成されて、これらを放置していると地味に容量を食います。

node 使いであれば「node_modules」等がけっこう容量食うと思いますし、このあたりは普段使ってる開発環境次第で変わるので人それぞれということで。

容量を食ってそうなディレクトリを決め打ちで探して総容量を算出する

コマンドの詳細な解説は省きますが、だいたいこんな感じで測定できます。

今回は /c/Projects 配下の「packages」を全部探して総容量を算出しました。

$ cd /c/Projects
$ find . -type d -name "packages" -exec du -sb {} + \
  | awk '{total+=$1} END{print total}' | xargs printf "%'d bytes"
55,489,524,267 bytes

この例だと 55GB 食っていたことが分かりました。消しましょう。

ディレクトリ名指定で find した全結果を一括削除

こちらもコマンドの詳細説明は省きます。

今回は /c/Projects 配下の「packages」を全部探して全部消します。

$ cd /c/Projects
$ find . -type d -name "packages" -print0 | xargs -0 rm -rf


本当に消して良いものかどうか、先に一覧を見ておきたい場合には以下を実行して結果を眺めたりすると良いです。

$ cd /c/Projects
$ find . -type d -name "packages"

補足説明

一応パス文字列に半角スペースが含まれているケースも考慮したコマンド構成にしてあります。興味のある方は各コマンドのオプション等をググってみてください。

追記:find の `-delete` オプションを利用する方法

コメント欄で id:takano32 氏に find の `-delete` オプションを教わりました。
この `-delete` オプションはディレクトリ削除には向いていません(空ディレクトリしか削除できない)が、通常ファイルの削除にはこのオプションを用いると xargs 等を絡めずに処理することができてシンプルに済みそうです。

以下は packages 配下に含まれる全ての通常ファイルを `-delete` オプションにより削除する例です。

$ cd /c/Projects
$ find . -type f -regex '.*/packages/.*' -delete 

今回の目的は「ディレクトリを抹消」することではなく「でかいファイルを削除することでディスク容量を確保する」ことですので、これで目的は達成させられます。

その他

Chrome の Downloads とかも放置してると地味に容量食いっぱなしになりますね。僕はさっき手動でこのディレクトリを整理したら 100GB ほど追加で浮きました。