大きいファイルの洗い出しをどう選ぶか|条件の見方

大きいファイルの洗い出しで先に手が止まるのは、道具選びではありません。「何を大きいと呼ぶか」と「どの大きさを見るか」が決まっていないまま検索したり、コマンドを打ったりするから、出てきた一覧を前にして次の手が決まらなくなります。同じMacの同じフォルダでも、条件の置き方ひとつで結果は数件にも数千件にもなります。ここでは、条件を決めるための見方を順番に整理します。道具の比較は、条件が決まったあとの話になります。

「大きい」の線は、容量ではなく空けたい量から決まる

100MB以上、1GB以上といった固定のしきい値から入る方法は、よく紹介されている割に外れやすい条件です。ディスクの中身は人によってまったく違うので、同じ線を引いても、片方では0件、もう片方では数千件が返ってきます。0件なら手掛かりがなく、数千件なら一覧として読めません。どちらも次の手が決まらない点では同じです。

先に決めるべきは、線ではなく目的の量です。あと50GB空けたいのか、5GBでよいのかで、見るべき件数がまったく変わります。目的の量が決まれば、大きい順に積み上げていって、その量に届くところが自然な線になります。上位から積んで50GBに達するのが40件なら、その40件だけを見ればよく、線を何MBに引いたかは結果としてついてくるだけです。

この考え方だと、条件は「しきい値」ではなく「上位何件か」になります。上位N件方式には、必ず結果が返るという利点があります。しきい値方式は空振りしますが、上位N件方式は中身がどうであれ、そのMacで一番大きいものから順に並びます。実際にコマンドで出すなら、大きさで並べ替えてから先頭だけを取る形になります。ある1台のダウンロードフォルダを数えた例では、500MBを超えるファイルが36件でした。この規模なら1件ずつ判断できますが、同じ線をホームフォルダ全体に引くと桁が変わります。範囲と線はセットで決まるものだと考えたほうが、無駄な往復が減ります。

同じファイルに3種類の「大きさ」がある

ここが条件づくりでもっとも取り違えやすい点です。1つのファイルには、見る角度によって違う数字が付いています。

  • 論理サイズ。ls -l が出すバイト数で、中身の長さそのもの
  • ディスク占有。du が既定で出す数字で、実際にブロックを使っている量
  • 見かけのサイズ。du -A が出す数字で、圧縮やスパース領域を展開した想定の量

3つ目の -A は、Mac上で man du を開けばその場で確認できます。マニュアルには、ディスク使用量の代わりに見かけのサイズを表示するオプションであり、圧縮されたボリュームやスパースファイルを扱うときに役立つ、と書かれています。裏を返すと、この2つが一致しない場面が実際にあるということです。

3つの数字がずれるのは例外的な状況ではありません。iCloud Driveに置いたまま本体から退避されたファイルを1つ調べると、ls -l5,409,971バイトと出すのに対し、du -k0du -Ak5,284KBを返しました。同じ1本のファイルです。

どれを条件にするかは、やりたいことで決まります。空き容量を増やすのが目的なら、見るべきはディスク占有です。論理サイズが大きくても、ディスク上で場所を取っていないファイルを消しても空きは増えません。逆に、整理が目的で「重いデータを外付けに移したい」のであれば、移した先で必要になるのは論理サイズのほうです。

条件を書くときの落とし穴がもう1つあります。find-size は、単位を付けないと512バイトのブロック数として解釈され、しかも切り上げられます。マニュアルには「True if the file's size, rounded up, in 512-byte blocks is n.」とあり、c を付ければバイト、M を付ければメガバイトとして扱われます。-size +100-size +100M はまったく違う条件です。単位は必ず書くものだと決めておくほうが安全です。

1件ずつ数えるか、フォルダごとに畳むか

大きいファイルの洗い出しという言葉から連想するのはファイル単位の一覧ですが、実際に容量を食っている相手は、しばしば「巨大な1本」ではなく「小さいものが数万件入ったフォルダ」です。ファイル単位の条件しか持っていないと、後者は最後まで一覧に出てきません。1件あたりが数百KBなら、どんなしきい値を引いても引っかからないからです。

フォルダ単位で畳むなら、深さを区切って段階的に降りるのが扱いやすい方法です。du -h -d 1 をホームフォルダで実行すれば、直下のフォルダごとの合計が並びます。そこで大きいものを1つ選び、その中でまた同じことをします。上から順に絞っていくので、無関係な階層を走査せずに済み、結果も毎回数十行で収まります。

この方法で浮かび上がりやすいのは、自分で作った覚えのない場所です。開発環境のビルド生成物、パッケージマネージャが置いた依存ライブラリ、ブラウザや動画アプリのキャッシュは、いずれも1件ずつは小さく、合計だけが大きくなります。これらはファイル単位で消す対象ではなく、フォルダごと扱うか、そもそも作らせない設定を変えるかの判断になります。条件を「ファイル単位」と「フォルダ単位」の2本立てで持っておくと、どちらの形の無駄も拾えます。

走査の範囲を先に決めておく

範囲を決めずに走らせると、時間だけかかって結果が読めません。出発点になるのはシステム設定のストレージ画面で、カテゴリ単位の内訳から、どのあたりに偏っているかの見当は付きます。ただしそこから先の細かい条件は指定できないので、自分で線を引く必要が出てくるのはこの画面の次の段階からです。

macOSでは、システムが入っているボリュームとデータが入っているボリュームが分かれています。df -h で見ると、システム側は読み取り専用で、ユーザーが消せるものはほとんどありません。洗い出しの対象になるのは、実質的にデータ側だけです。

ホームフォルダの中でも、~/Library はFinderでは既定で隠れています。ここにはメール、写真ライブラリ、各アプリのキャッシュやコンテナが入っていて、容量の面では主役級です。Finderの画面だけを見て「大きいファイルはない」と判断してしまうのは、この隠れた領域を数えていないからです。

外付けドライブやネットワーク上の共有を範囲に入れるかどうかも、先に決めておく項目です。走査の速度が本体の内蔵ドライブとは桁違いになるので、同じ条件でも所要時間がまったく変わります。範囲を決めるときは、対象のボリュームを1つずつ指定して、混ぜないほうが結果を読みやすくなります。どんな場面を想定しているかはできることにまとめられています。

権限も範囲の一部です。ターミナルからホームフォルダ全体を走査する場合、フルディスクアクセスが与えられていないと、保護されたフォルダが黙って飛ばされます。エラーは出ますが標準エラー出力に流れるため、結果だけを見ていると「そこには何も無かった」ように見えます。範囲を決めたら、その範囲が本当に読めているかまで確認して初めて条件が完成します。

索引を引くか、その場で歩くか

洗い出しの方法は、大きく2つに分かれます。Spotlightが作った索引を引く方法と、その場でディレクトリを歩く方法です。Finderの検索窓や、検索条件を保存するスマートフォルダは前者です。mdfind 'kMDItemFSSize > 500000000' のような書き方も同じ索引を引きます。finddu は後者です。

速度差は無視できません。ある1台のダウンロードフォルダで同じ条件を測ると、索引を引く方法は0.09秒、その場で歩く方法は1.00秒でした。範囲がディスク全体に広がれば、この差はさらに開きます。

一方で、同じMacの ~/Library に同じ条件を当てると、索引を引く方法は73件、その場で歩く方法は139件を返しました。索引は、対象から外されている場所、まだ更新が追いついていない場所、すでに消えたのに項目が残っている場所を抱えています。速さと引き換えに、範囲と鮮度が索引の状態に左右されます。

選び方は単純です。ざっと当たりを付けたい段階では索引を引き、実際に消す判断をする段階ではその場で歩く。この使い分けにしておけば、速さも漏れの少なさも両方使えます。片方だけに決めてしまうと、待たされるか、見落とすかのどちらかになります。

画面で見るか、一覧で見るか

道具の形にも2つの系統があります。面積で大きさを表す図で全体を俯瞰する形と、大きい順に並んだ一覧を上から処理する形です。どちらが向くかは、探しているものの形で決まります。

1本の巨大なファイルを探しているなら、一覧のほうが速く終わります。上から順に見て、要らないものを外すだけです。反対に、どこに溜まっているのか見当も付かない状態なら、図のほうが手掛かりになります。画面の中で不自然に大きい区画を見つけて、そこへ降りていく使い方ができるからです。

この選択は、そのまま費用の話にもつながります。macOSに標準で入っている機能と、追加費用なく使えるコマンドで、一覧型の洗い出しはひととおり成立します。図で見る機能は、無料のものと有料のものの両方があります。どこまでが標準の範囲で、どこから先が追加費用になるのかは料金の考え方と、他のファイル管理との比較に整理されています。

条件が決まっても、判断は残る

洗い出しは目的ではなく、判断のための材料づくりです。一覧が出た時点で残っているのは、1件ずつについて「消す」「外に出す」「そのまま残す」を決める作業で、こちらのほうが時間がかかります。

判断のたびに窓を往復するかどうかで、かかる時間はかなり変わります。一覧を見て、中身を確かめて、コマンドで移して、また一覧に戻る。この往復が別々のアプリにまたがっていると、1件あたり数十秒の移動が積み重なります。フォルダとターミナルとAIが同じ窓にある状態なら、一覧を見ながらそのまま処理に移れるので、判断そのものに時間を使えます。iPhoneやiPadから続きを確認する使い方はiPhone・iPadから続きをで説明されています。

もう1つ、条件の設計に関わる点として、洗い出しの結果は再現できる形にしておくと後が楽になります。Appleの案内では、条件を保存する仕組みがこう説明されています。

指定した基準に基づいて、共通点のあるファイルをまとめて便利なリストを保持するには、スマートフォルダを使用します。 出典: support.apple.com

大きさを基準にした条件も、この形で保存できます。コマンドのほうは履歴に残ります。次に容量が逼迫したときに、同じ線をもう一度引き直さずに済みます。整理は一度で終わる作業ではないので、条件そのものを資産として残す発想が効いてきます。用語や表記に迷ったときは対応言語よくある質問に補足があります。

条件を選ぶときに最初に決める1つ

最初に決めるのは、道具でもしきい値でもなく「どの大きさを見るか」です。空きを増やしたいならディスク占有、移動や整理が目的なら論理サイズ。ここが決まると、範囲も方法も自然に絞り込まれます。逆にここが曖昧なままだと、どの道具を選んでも結果を読み解けません。

よくある質問

しきい値は何MBから始めるのが妥当ですか?

固定の推奨値はありません。空けたい容量から逆算するほうが確実です。あと50GB空けたいなら、大きい順に並べて合計が50GBに届く件数を見て、その最後の1件の大きさが実質的な線になります。先に数字を決めると、0件か数千件かのどちらかに振れやすくなります。

Finderの検索とターミナルのコマンドで、件数が合わないのはなぜですか?

Finderの検索はSpotlightの索引を引き、コマンドはその場でフォルダを歩くためです。索引には、対象から外された場所、更新が追いついていない場所、すでに消えたのに残っている項目が含まれます。ある1台の同じフォルダでも、73件と139件という差が出ました。消す判断をする段階では、その場で歩く方法を使うほうが安全です。

一覧に出てきた大きなファイルを消したのに、空き容量が増えません。

そのファイルがディスク上でブロックを使っていない可能性があります。iCloudに退避されたファイルは、論理サイズが5MBあってもディスク占有は0です。この状態のファイルを消しても空きは変わりません。ゴミ箱に入ったままの場合や、バックアップのローカルスナップショットが領域を保持している場合もあります。

フォルダ単位とファイル単位は、どちらを先に見るべきですか?

フォルダ単位が先です。深さを1段に区切って直下の合計を出し、大きいものを選んでまた1段降りる、という進め方なら結果が毎回数十行で収まります。ファイル単位の一覧だけだと、1件あたりは小さいのに数万件あって合計が大きい、という形の無駄が最後まで見えません。

記事一覧へ戻る