名前とサイズの照合がなぜ間違ったファイルを掴むのか
名前による照合は、両方向で失敗します。同じ写真を 2 回保存すると IMG_4021.jpg と IMG_4021 (1).jpg になります——名前は違い、バイトは同一。一方、まったく無関係な 2 つの文書が、どちらも invoice.pdf という名前を持てます。サイズを加えると誤一致は減りますが、消えはしません——同じカメラで撮った別々の 2 枚の JPEG は数バイト差に収まることが多く、小さな設定ファイルの山は、偶然まったく同じサイズになりがちです。
安全の観点で本当に問題になる方向は、偽陽性です。見た目が似ているだけで 2 つのファイルを重複と判定するツールは、遅かれ早かれ、取り返しのつかないものを削除します。「類似画像」マッチングを自動処理に疑いの目を向けるべきなのも、同じ理由です。写真ライブラリを手作業で仕分けるには本当に便利ですが、ほぼ同一に見える 10 枚の連射は、9 つの重複ではなく 10 枚の別々の写真であり、どのフレームで目が開いているかを知るアルゴリズムは存在しません。
筋の通る定義は、バイト単位の同一性ただひとつです。2 つのファイルが重複かどうかは、名前、フォルダー、タイムスタンプ、拡張子に関係なく、内容が同一かどうかで決まります。これはハッシュが答えられる問いで、しかも毎回同じ答えを返します。
コンテンツ ハッシュの仕組みと、速い理由
暗号学的ハッシュは、どんなファイルも固定長の指紋へ縮めます——SHA-256 なら 16 進 64 文字です。同一の内容は必ず同一の指紋を生み、実用上、異なる 2 つのファイルが衝突することはありません。指紋の比較はファイル全体の比較の信頼できる代用になり、ペアごとの総当たりではなく、数千のファイルを互いに比較できるようになります。
すべてをハッシュするということは、ドライブ上の全バイトを読むということなので、まともな実装は段階を踏みます。まずサイズの完全一致でグループ化します——サイズが違うファイルは同一になり得ないためで、このステップだけで、内容を 1 バイトも読まずに、候補の圧倒的大半を排除できます。次に、複数のファイルが残ったグループの中身だけ、先頭の小さな断片をハッシュします。このラウンドを生き延びたものだけが、フルの SHA-256 を受け取ります。典型的なドライブでは、フル読み取りの段階が触れるのは、データのごく一部で済みます。
この段階構造が、スキャンのあるべき手触りを説明します。数十万ファイルの初回パスは、ほぼメタデータの仕事で、数分で終わります。遅いのは、本当に同じサイズを共有する大きな動画ファイル群の、最終ハッシュ化です。内容で比較していると謳いながら数時間かけてディスクを張り付かせるツールは、おそらく、無差別にすべてをハッシュしています。
PowerShell で手作業で行う
狙いを絞った確認に、ソフトは必要ありません。次のワンライナーは、ファイルをサイズでグループ化し、単独サイズを捨て、残りを SHA-256 でハッシュし、複数のファイルがハッシュを共有するグループだけを出力します。対象は特定のフォルダーに向けてください——ドライブ全体でも動きますが、時間はかかります。
- Get-ChildItem -Path 'C:\Users\You\Pictures' -Recurse -File | Group-Object Length | Where-Object { $_.Count -gt 1 } | ForEach-Object { $_.Group } | Get-FileHash -Algorithm SHA256 | Group-Object Hash | Where-Object { $_.Count -gt 1 } | ForEach-Object { $_.Group.Path }
- Get-ChildItem に -Filter '*.jpg' を追加すると、1 種類のファイルに限定
- 末尾に | Out-File C:\Temp\dupes.txt を追加すると、確認用に一覧を保存
- Windows ターミナルか PowerShell で実行。自分のフォルダーなら管理者権限は不要
- 巨大な動画ライブラリを速く処理したいなら、Get-FileHash -Algorithm SHA1 への切り替えも可
何かを削除する前に、出力を読む
上のコマンドは、意図的にパスだけを表示し、何も削除しません。この分離こそ、安全モデルのすべてです——一覧を作り、読み、それから動く。出力をフォルダー順に並べ替えれば、たいていパターンは即座に見えます。日付付きバックアップ フォルダーに複製されたカメラの取り込みフォルダー、2 回エクスポートされたプロジェクト、ミュージックと、C: へ貼り付けられた古い外付けドライブのコピーの両方に存在する音楽ライブラリ。
いざ削除するときは、恒久削除ではなくごみ箱経由にし、小さなバッチに分けて、合間にマシンを普通に使う時間を挟みましょう。重複クリーンアップの失敗の形は、単発の誤った 1 ファイルではなく、関係を理解していないフォルダー横断への、自信満々の一括選択です。ごみ箱をループに組み込んでおけば、高くつくミスが、不便程度に変わります。
重複が実際に溜まる場所
本物の重複は、予測可能な数か所に集中するため、そこだけをスキャンする方が、C: 全体をスキャンするより速く、そしてはるかに安全です。チャンピオンはダウンロードです——同じインストーラーや PDF を 3 回取得し、それぞれに番号付きの接尾辞が付く。写真フォルダーがその次で、たいていは、スマートフォンの取り込みが 2 回走ったか、カードが名前変更の前後にコピーされたことが原因です。
- ダウンロード — (1)、(2) 付きの重複ダウンロード
- ピクチャーとスマートフォンの取り込みフォルダー — 複数回実行された取り込み
- クラウド フォルダー — デバイス名が付いた OneDrive・Dropbox の競合コピー
- デスクトップと、Windows 再インストールの名残の「古いデスクトップ」フォルダー
- メッセンジャーのメディア フォルダー — 複数のチャットが保存した同じ画像
- プロジェクトのエクスポート フォルダー — 繰り返しエクスポートされたレンダーとビルド
- 古い外付けドライブの中身を丸ごと C: のフォルダーへコピーしたもの
絶対に重複排除してはいけないもの
ソフトウェア インストール内の重複コンテンツは、正常かつ意図的なものです。多くのアプリケーションは、同じランタイム ライブラリーを意図的に複数のフォルダーに同梱し、それぞれが、テスト済みのバージョンを読み込めるようにしています。一致するからと片方を削除すると、起動は正常なのに、特定の機能が数か月後に壊れるアプリが出来上がります。同じ理屈は、ゲームのアセット パックにも、同一の依存関係が多数のプロジェクト サブフォルダーに現れる開発フォルダーにも当てはまります。
最も鋭い刃は、Windows 自身です。C:\Windows\WinSxS は、重複に見えて実は同じデータを指すハード リンクだらけで、単純なスキャナーは、削除しても容量が解放されず、削除したらサービス処理が壊れる「重複」をギガバイト単位で報告します。重複スキャンは自分のデータ フォルダーに限定し、システム フォルダーのスキャンを提案してくるツールは、ツールを変える理由と捉えましょう。
- C:\Windows とその配下のすべて — とりわけ WinSxS
- C:\Program Files と C:\Program Files (x86)
- %APPDATA% と %LOCALAPPDATA% — アプリの状態とプロファイル
- C:\ProgramData — ライセンスとアプリのデータベース
- ゲームのインストール フォルダーとランチャーのコンテンツ ディレクトリ
- 開発フォルダー:node_modules、vendor、仮想環境、ビルド出力
- 自分以外のユーザーも使うドライブ上のあらゆるもの
どちらのコピーを残すか——と罠
グループの同一性が確認できたら、残すべきは「最初に探しに行くであろう場所」にあるコピーです——たいていは、バックアップでも、ダウンロードのコピーでも、デスクトップのものでもなく、元のフォルダーの方です。最短で最もまともな名前のパスを優先しましょう。片方が同期されたクラウド フォルダーにあり、片方になければ、同期側を残すのは、そのフォルダーが本当にあなたの仕事場所のときだけにすべきです——さもないと、後から同期をリセットするかもしれないサービスに、唯一のコピーを手渡すことになります。
名指しに値する罠が 3 つあります。ハード リンクは、同じデータを共有する別々のパスとして現れるため、片方を削除しても容量は解放されず、もう片方は動き続けます——害はないが、報告された節約額が一向に現れないとき、混乱の元になります。OneDrive の Files On-Demand のクラウド プレースホルダー ファイルは、ローカルに存在すらしていないことがあり、ハッシュ化すれば、フォルダー全体のダウンロードを強制します。そして、他の何かに管理されているフォルダー内のファイル——バックアップ セット、リポジトリ、ゲーム ライブラリ——は、ファイル システムの視点からだけ重複であって、それを所有するプログラムは、両方の存在を期待しています。
このワークフローを繰り返し使える形にしたものが、Kleaner PRO の重複ファイル検索です——名前ではなく SHA-256 で比較し、システムとプログラムのフォルダーを既定で除外し、一致をフル パス付きでグループ化し、何かが削除される前に、残すコピーを自分で選べます。上記の PowerShell ルートは、単一フォルダーで同じ仕事をこなす、1 か所だけ確認したいときのための正しい道具です。
よくある質問
重複ファイルの自動削除は安全ですか?
システムやプログラムのフォルダーでは安全ではありません——そこでは、同一ファイルが意図的だったり、ハード リンクだったりするのが普通です。自分のドキュメント、写真、ダウンロードなら、ツールがコンテンツ ハッシュで照合し、ごみ箱経由で削除するという条件付きで、安全です。
異なる 2 つのファイルが同じ SHA-256 ハッシュを持つことはありますか?
実用上はあり得ません——SHA-256 の衝突は、一度も生成されたことがありません。だからこそ、名前・サイズ・タイムスタンプの比較ではなく、ハッシュが重複排除に使われるのです。
重複を削除しても、報告より容量が解放されないのはなぜですか?
たいていはハード リンクです。1 つのデータを複数のパスが指しているため、パスを 1 つ除去しても、何も解放されません。クラウドのプレースホルダー ファイルも、ローカルにはほぼ存在しないのに、フル サイズでカウントされることがあります。
類似写真と重複写真は同じですか?
違います。類似画像マッチングは見た目を比較するため、ほぼ同一の連射が重複に見えても、実際は 10 枚の別々の写真です。手作業での確認に使い、一括削除には決して使わないでください。
購入前にライセンスの内容をご確認ください。
一度限りの 30 分試用では基本ツールを利用できます。PRO 機能は有料ライセンスを有効にするまでロックされています。
次に読む記事
お問い合わせ: [email protected]