重複ファイルの整理とは|4つの意味と、数が合わない理由
重複ファイルの整理という言葉は、ひとつのことを指しているようでいて、実際には性質の違う4つの状態をまとめて呼んでいます。この曖昧さのせいで、同じMacを同じ日にスキャンしても、使う道具によって検出件数が10倍以上ずれます。ここでは「何を重複と数えるのか」を先に切り分け、どの数え方だと空き容量が戻り、どの数え方だと戻らないのかを整理します。
「重複」と呼ばれているものは、実は4種類ある
ディスク上で「同じに見えるファイルが2つある」状態には、成り立ちの異なるパターンが混ざっています。
- 名前が同じで、中身が違う。別々のフォルダに置かれた
請求書.pdfが、それぞれ違う月のものだった、という形です。名前だけを見る道具はこれを重複と数えます - 中身が同じで、名前が違う。ダウンロードし直した、メールで受け取ったものを保存した、圧縮ファイルを2回展開した。実務でいちばん多いのはこれです
- クローン。APFSというMacの現在のファイルシステムが持つ仕組みで、実体をひとつだけ置いたまま、見かけ上2つのファイルとして扱う状態です
- ハードリンクとエイリアス。ひとつの実体に複数の入口を用意したもので、アプリの内部やバックアップの仕組みが自動的に作ります
この4つは、消したときに起きることがまったく違います。2番目を消せば容量が戻ります。3番目と4番目を消しても、容量はほとんど戻りません。1番目を消すと、単に別の資料が消えます。道具の検出画面はこれらを同じ一覧に並べて出すことがあるため、件数だけを見て判断すると噛み合いません。
4番目のハードリンクとエイリアスも、性質が分かれます。ハードリンクは同じ実体に複数の名前を与えたもので、どの名前から開いても同じ中身が返り、どれか1つを消しても実体は残ります。エイリアスとシンボリックリンクは実体への案内板で、案内先が消えれば開けなくなります。見分け方は、ファイルの情報に出るリンク数を見ることです。リンク数が2以上なら、その実体には別の名前も付いています。この種類を「重複だから」と片づけると、参照していた側のアプリが動かなくなることがあります。
The GNU Core Utilities are the basic file, shell and text manipulation utilities of the GNU operating system. These are the core utilities which are expected to exist on every operating system. 出典: gnu.org
中身が同じかどうかを判定する道具立て自体は、特別なものではありません。どのOSにもある基本的な部品で組めます。難しいのは判定ではなく、何を同じとみなすかの定義のほうです。
名前で数えるか中身で数えるかで、桁がふたつ変わる
定義の違いが数にどう効くのかは、実際のフォルダで測ると分かりやすくなります。31,263本・91GBのダウンロードフォルダを2通りの数え方で見た結果が、次の表です。
| 数え方 | 検出された本数 |
|---|---|
| 名前に「 2」「copy」「のコピー」などの印が付いている | 63本 |
| 中身のハッシュが完全に一致する | 18,054本 |
名前の印を手がかりにする方法では、実際に重なっている本数の0.3%ほどしか拾えませんでした。重なっていた容量は合計9.53GBで、フォルダ全体の1割強にあたります。
この差が生まれるのは、複製されるときに名前が変わらない経路のほうが多いからです。圧縮ファイルを別の場所で展開すれば、中のファイル名は元のままです。同じ添付ファイルを2つのメールから保存すれば、片方に連番が付くこともありますが、保存先が違えば付きません。プロジェクトのフォルダをまるごとコピーしたときも、中身の名前は1本も変わりません。名前は、複製されたという事実をほとんど記録しないのです。
逆に言えば、名前で数える方式の道具を使っていて「うちはそんなに重複していない」と結論していた場合、その結論は数え方が作ったものである可能性があります。
消しても空き容量が増えない重複がある
APFSのクローンは、重複ファイルの整理でいちばん誤解されやすい存在です。実際に200MBのファイルを用意し、クローンとして複製した場合と、通常のコピーをした場合とで、ディスクの空き容量がどう変わるかを測った結果が次の通りです。
| 複製の仕方 | 増えたディスク消費 |
|---|---|
| クローンとして複製 | 4KB |
| 通常のコピー | 約200MB |
やっかいなのは、この2つが見分けられないことです。ファイル一覧が返すサイズはどちらも209,715,200バイトで同じ。占有ブロック数も409,600で同じ。使用量を調べるコマンドに尋ねても、クローンのほうを200MBと答えます。ディスクの空き容量そのものを複製の前後で比べたときだけ、片方が4KBしか使っていないことが分かります。
Finderの「複製」で作ったファイル、cp -c で作ったコピー、仮想マシンのイメージ、一部のバックアップソフトが作る世代は、この形になっていることがあります。重複検出の一覧に上がってきたファイルを削除したのに空き容量がほとんど動かなかったなら、消した相手がクローンだった可能性が高いと考えられます。
クローンには続きがあります。クローンとして複製した直後は実体を共有していますが、片方に書き込みが入ると、書き換わった部分だけが新しい領域に分かれていきます。つまり同じ2本でも、作った直後なら削除の効果はほぼゼロ、編集を重ねたあとなら効果が出る、という中間の状態があり得ます。「クローンだから消しても無駄」と一律に決められないのは、この性質のためです。
さらに、Macのローカルスナップショットも空き容量の読みを狂わせます。削除したファイルがスナップショットに含まれている間は、ディスク上の領域が解放されません。重複を消した直後に空き容量が動かず、しばらく経ってから増えるように見えるのはこのためです。削除の効果を測るなら、消した直後の一度だけでなく、時間をおいた値も見ることになります。
中身が同じでも、置き換えていいとは限らない
ハッシュが一致した2本を「どちらを残しても同じ」と扱うと、後で困ることがあります。ファイルの中身とは別に、macOSはファイルに付帯情報を持たせているためです。
同じ中身の2本を用意し、片方にだけブラウザ経由でダウンロードされた印を付けて比べると、中身のハッシュは完全に一致したまま、付帯情報だけが食い違います。この印が付いている側を残すと、開いたときに確認のダイアログが出ます。付いていない側を残せば、そのまま開きます。
同様に食い違いうるのは、次のようなものです。
- 作成日時と変更日時。同じ中身でも、あとから保存した側は日付が新しくなります
- Finderのタグと色ラベル。整理のために付けたタグは、コピーした側には付いていないことがあります
- パスを名指ししている外部からの参照。スクリプト、バックアップの除外設定、アプリの「最近使った項目」は、残したほうではなく消したほうを指していることがあります
つまり、重複ファイルの整理で決めるべきことは「どちらを消すか」ではなく「どちらを残すか」です。残す側の条件を先に言葉にしておかないと、判断の基準が毎回変わります。
ボリュームの側が、すでに一部の重複を作らせていない
名前の揺れが重複を生むと考えられがちですが、macOSの既定のボリュームではそうならない場合があります。
同じフォルダに Report.pdf と report.pdf を作ろうとすると、あとから作ったほうが先のファイルを上書きし、残るのは1本だけです。既定のAPFSボリュームが大文字と小文字を区別しないためで、大小文字違いの2本が並んで存在する状況自体が起きません。
日本語のファイル名についても同様のことが言えます。濁点を1文字として持つ書き方と、清音と濁点記号に分けて持つ書き方は、バイト列としては別物です。しかしAPFSはこの違いを同じ名前として扱うため、同じ見た目の名前で2本のファイルが並ぶことはありませんでした。
ここから分かるのは、名前の揺れを疑って時間を使う必要はあまりない、ということです。探すべきは、名前がまったく違うのに中身が同じファイルのほうです。
「似ている」は重複とは別の問題
写真や音楽を多く持っている場合、完全一致では拾えない重なりが残ります。同じ場面を連続で撮った写真、書き出しのたびに画質設定が違ったJPEG、同じ曲でビットレートの違う音源。これらは1バイトでも違えばハッシュが変わるので、中身一致の検出には出てきません。
この種類の判定は、画像の見た目や音の特徴を比べる別の処理になります。完全一致の判定が「同じか違うか」で答えが出るのに対し、類似の判定は「どれくらい似ていたら同じ扱いにするか」というしきい値を人が決めることになります。自動で消してよい対象ではありません。
あわせて注意したいのが、写真アプリのライブラリです。これは中に数万のファイルを含むパッケージで、見た目はひとつのファイルとして扱われます。ライブラリの中を直接スキャンすると、アプリが管理のために持っているサムネイルや中間ファイルが大量に重複として上がってきますが、そこを手で消すとライブラリ自体が壊れます。写真の重複は、写真アプリ側の重複表示から扱うのが筋です。アプリの本体である .app も同じ構造で、中を開いて重複を消す対象ではありません。
数え方を決めてから、道具を選ぶ
ここまでを踏まえると、道具選びの順番が逆になっていることが多いと分かります。先に道具を入れて、出てきた件数を見て驚く。そうではなく、自分がどの種類の重なりを減らしたいのかを決めてから、その数え方ができる道具を探すほうが早く着きます。
判断の材料として、次の3点を先に決めておくと迷いが減ります。1つ目は対象の範囲で、ダウンロードフォルダだけなのか、外付けディスクや同期フォルダまで含めるのか。2つ目は残す側の条件で、古いほうを残すのか、決めた保管場所にあるほうを残すのか。3つ目は確認の方法で、削除後に空き容量が想定どおり増えたかをどう測るのかです。
道具が何をどこまで見ているかを比べるときは、検出の方式と対象範囲を並べた資料が役に立ちます。各アプリの守備範囲を横に並べた他のファイル管理との比較は、名前での判定か中身での判定か、外付けや同期フォルダを対象にできるかといった軸で整理されています。ファイル操作と検索の機能がどこまで用意されているかはできることにまとまっており、ファイル一覧の上で直接コマンドを走らせられる場合は、検出と確認を別のアプリに分けずに済みます。フォルダとターミナルとAIが同じ窓にある構成なら、見つけたファイルの中身をその場で確かめてから消す判断に移れます。
費用の見積もりを先に立てたい場合は料金を、判定の対象範囲や対応環境について個別の疑問がある場合はよくある質問を見ておくと、道具を入れてから条件が合わないと気づく回り道を避けられます。外付けディスクやスマートフォンから撮った写真の取り込み経路まで含めて考えるなら、iPhone・iPadから続きをで扱われている取り込み側の動線も、重複が生まれる入口として確認しておく価値があります。
重複ファイルの整理は、ディスクを空けるための作業であると同時に、どこに何を置くかの決め直しでもあります。数え方を決めずに走らせると、件数だけが増えて判断が止まります。数え方を決めてから走らせると、消す前に何を残すのかが自動的に決まります。
よくある質問
重複ファイルの整理で見つかった件数が道具によって違うのはなぜですか?
判定の方式が違うためです。名前の一致で数える道具と、中身のハッシュで数える道具では結果が桁で変わります。実測では、名前にコピーの印が付いていたファイルが63本だったのに対し、中身が完全に一致したファイルは18,054本ありました。まず自分の道具がどちらの方式かを確かめてください。
重複を削除したのに空き容量がほとんど増えませんでした。何が起きていますか?
消した相手がAPFSのクローンだった可能性があります。クローンは実体をひとつだけ持ったまま2つのファイルとして見える仕組みで、200MBのファイルをクローンで複製したときにディスクが増えた消費は4KBでした。ファイル一覧も使用量コマンドも通常のコピーと同じサイズを返すため、事前の見分けは困難です。
中身が完全に一致していれば、どちらを消しても同じですか?
同じとは限りません。中身のハッシュが一致していても、作成日時、Finderのタグ、ダウンロード由来の印などの付帯情報は食い違います。またスクリプトやアプリの設定が、残す予定ではないほうのパスを指していることもあります。消す側ではなく残す側の条件を先に決めておくのが安全です。
写真アプリのライブラリの中も重複スキャンの対象にしてよいですか?
ライブラリは中に多数のファイルを含むパッケージなので、外部の道具で中身を直接消すとライブラリが壊れます。管理用のサムネイルや中間ファイルが大量に重複として検出されますが、それらは削除対象ではありません。写真の重複は、写真アプリ自体が持つ重複表示から扱ってください。