Macで2つのフォルダを比較して違いを見つける方法

Finderには2つのフォルダを比較する機能がありません。フォルダを外付けディスクやNAS、クラウドにコピーしたあと、そのコピーが完全かどうか確かめたいとき。あるいはプロジェクトの2つのバージョンを見比べて、何が変わったか知りたいとき。Macでは3つの方法があります。ターミナルのdiffコマンド、Appleの「FileMerge」アプリ(Xcodeに付属)、そしてFolia Filesのような比較ツールを備えたファイルマネージャです。どの方法でも、片方のフォルダにしかないファイルと、両方にあるのに中身が違うファイルがわかります。
Finderでは違いがわからない理由
Finderでいちばん近いのは、それぞれのフォルダで情報を見る(⌘I)を開き、サイズと項目数を確かめることです。数字が一致すれば、たぶん同じフォルダです。ただし証明にはなりません。中身が変わってもサイズが同じままのことがあるからです(テキストファイルの1文字を直しただけ、など)。数字が違っても、どのファイルが足りないのかはわかりません。あとは2つのフォルダを並べて開き、名前をひとつずつ確認するしかありません。
ターミナルのdiffで2つのフォルダを比較する
macOSにはdiffコマンドが入っていて、2つのオプションを付けるとフォルダ全体を比較できます。
diff -rq ~/Pictures/Iceland /Volumes/Backup/Iceland
-rはすべてのサブフォルダの中まで調べ、-qはファイルごとの変更内容を表示せず、違うファイルの名前だけを報告します。パスを入力したくなければ、diff -rq と入力してから、Finderで各フォルダをターミナルのウインドウにドラッグします。
結果には2種類の行が出ます。
Files /Users/alex/Pictures/Iceland/IMG_4021.jpg and /Volumes/Backup/Iceland/IMG_4021.jpg differ
Only in /Users/alex/Pictures/Iceland: IMG_4048.jpg
Only inは、片側にしかないファイルやフォルダです(フォルダの場合、中身は表示されません)。Files … differは、同じ名前・同じ場所のファイルが両側にあるものの、中身が違うという意味です。diffが何も表示しなければ、2つのフォルダには同じファイルが同じ内容で入っています。
知っておきたいこと:
diffはファイルを読んで比較します。そのため正確ですが(日付は関係ありません)、大きな写真・ビデオのライブラリやネットワークドライブでは時間がかかります。- Finderが作る隠しファイル
.DS_Storeは、コピーごとに違っていることがよくあります。-x .DS_Storeで除外しましょう。 - ファイルを一切読まずに名前だけを確かめるなら(遅いディスクでもすぐ終わります)、2つのファイル一覧を比較します。
diff <(cd ~/Pictures/Iceland && find . | sort) <(cd /Volumes/Backup/Iceland && find . | sort)
<で始まる行は1つ目のフォルダにだけ、>で始まる行は2つ目のフォルダにだけあるファイルです。
FileMergeでフォルダを比較する
FileMergeはApple純正の比較アプリです。無料ですが、Appleの開発ツールであるXcodeに付属していて、Mac App Storeからの大きなダウンロードになります。軽いCommand Line Toolsには含まれていません。Xcodeをインストールしたら:
- XcodeのメニューXcode › Open Developer Tool › FileMergeから開きます(Xcodeは英語のみです)。ターミナルで
opendiffのあとに2つのフォルダを指定しても開けます。 - 左と右のフォルダを選んで、Compareをクリックします。
FileMergeは両方のフォルダのファイルを一覧にします。同一のファイルはグレー、違うファイルや片側にしかないファイルは黒で表示されます。ファイルをダブルクリックすると、2つのバージョンを1行ずつ比べられます。ソースコード向けのツールなので、テキストファイルなら何が変わったか正確にわかりますが、写真やビデオ、PDFでは違うということしかわかりません。
Folia Filesで2つのフォルダを比較する
Folia Filesには比較ツールがあり、結果を並べ替えできる表で示し、足りないファイルをどちら向きにもコピーできます。Webサイト版とMac App Store版の両方に入っています。
- 2つのフォルダを2つのパネルに並べて開きます(Macで2つのフォルダを並べて表示する方法)。必須ではありませんが、比較ツールは最初の2つのパネルのフォルダから始まります。
- ツール › 比較…(⇧⌘K)を選ぶか、ツールバーのツールをクリックしてから比較をクリックします。ツールはタブで開きます。
- 左と右のフォルダを確認します。選択…で別のフォルダを選べます。あいだの矢印で左右を入れ替えられます。
- 比較をクリックします。

各ファイルには、次の4つの状態のどれかが付きます。
- 異なる:両方のフォルダにあるが、同じではない
- 左のみと右のみ:もう一方のフォルダにない
- 同一:両方のフォルダで同じ
一覧の上のボタンは、状態ごとのファイル数を示し、一覧を絞り込みます。同一のファイルは最初は非表示なので、見えているのは確認が必要なものだけです。同一のファイルも見たいときは同一をクリックします。左、変更あり(左)、右、変更あり(右)の列には左右それぞれのサイズと日付が出るので、どちらのコピーが新しいかがわかります。

速さか、正確さか
標準では、Folia Filesはファイルの中身を読みません。サイズと変更日が同じ(誤差2秒以内)なら同一とみなします。何千枚もの写真でもすぐに終わります。
日付が当てにならないときは、内容を比較(低速、正確)をオンにします。元の日付を保たずに作られたコピー(たとえば-pなしのcpでコピーしたものや、クラウドのWebサイトからダウンロードし直したもの)では、すべてのファイルが異なるになってしまいます。このオプションをオンにすると、サイズが同じファイルはSHA-256のフィンガープリントで比較され、日付は無視されます。サイズが違うファイルは常に異なるです。
ほかのルール:
- 両側にあるサブフォルダ自体は一覧に出ません。その中のファイルが、フォルダ内のパス付きで表示されます。
- 片側にしかないフォルダは、中身を展開せずにフォルダとして1行で表示されます。
- 隠しファイルは、非表示ファイルをオンにしない限り対象外です。Finderの
.DS_Storeは常に無視されます。 - ファイルはパスで対応づけられます。片方のフォルダで名前を変えたファイルは、左のみ(一方の名前)と右のみ(もう一方の名前)の2行になります。
足りないファイルをコピーする
行を選び(複数なら⌘クリックか⇧クリック)、ツール下部の選択項目を右へコピー →または← 左へをクリックします。同じコマンドは右クリックメニューにもあり(右へコピー →、← 左にコピー)、Folia Filesの左側に表示とFolia Filesの右側に表示を選ぶと、アクティブなパネルでそのファイルの場所を開きます。
- 足りないサブフォルダは、もう一方に作られます。
- コピー先にすでにファイルがある場合(異なるファイル)、Folia Filesがどうするか尋ねます。標準は両方とも残すです。新しい場合はコピーするファイルのほうが新しいときだけ置き換え、置き換えるは新しいファイルのコピーが完了してから古いほうをゴミ箱に入れ、スキップは何もしません。
- コピーが終わると、比較がもう一度実行されます。コピーしたファイルは変更日も保たれるので、通常は同一になって一覧から消えます。これらのコピーは、ほかのコピーと同じく操作の履歴に記録されます。
ファイルの中で何が変わったかを見る
異なるファイルをダブルクリックするか、右クリックして差分を表示を選びます。ツールがファイル表示に切り替わり、テキストファイルの2つのバージョンを1行ずつ左右に並べて表示します。削除された行は赤、追加された行は緑で、追加・削除された行数も出ます。写真やPDFなどほかのファイルでは、同一かどうかをサイズとともに表示します。
どれを使えばいいか
- ターミナルに慣れていて、すばやく正確に確かめたいなら:
diff -rq - コードやテキストファイルの2つのバージョンを比べたい、Xcodeもある:FileMerge
- コピーやバックアップが完全か確かめて、その場で直したい(とくに写真や書類):Folia Filesの比較ツール
毎週同じ差分を手でコピーしているなら、同期に任せましょう。Macで2つのフォルダを同期させる方法をご覧ください。これから行うコピーについては、Folia Filesがコピーしながら各ファイルを検証することもできます。設定 › ファイルとネットワーク › ほかのディスクにコピーしたすべてのファイルを検証(読み戻して比較、低速)をオンにしてください。


