ターミナル: 「diff」でフォルダを比較する

ターミナル: 「diff」でフォルダを比較する

2分で読めます
| macOS

バックアップドライブから古いバージョンのフォルダをコピーしたとします。その内容とMacの現在のバージョンを比較する必要がある場合、多くの人はそれを実現するための組み込み機能があることを知りません。使い方も分かりやすさも非常に簡単です。ターミナルからアクセスするので、まずはアプリケーション > ユーティリティフォルダからターミナルを起動します。

準備ができたら、プロンプトに「diff」と入力し、スペースを入れてから、比較したい2つのフォルダをターミナルウィンドウにドラッグ&ドロップします。この操作は順番は問いませんし、間にスペースを入れる必要もありません。

これにより、ターミナルがそれらのフォルダーへのパスを入力し、次のような画面が表示されます。

Return キーを押してコマンドを実行すると、ターミナル ウィンドウに興味深いデータが表示されます。

うわ、意味不明な言葉が山ほどあるじゃないか。でも、その意味不明な言葉がなかなか面白い。この言葉から、名前は同じだけど中身が違うJPEGファイルが2つあることが分かる。

バイナリファイル /Users/melissa/Desktop/TMO/20130524 Table.jpg と /Users/melissa/Desktop/TMO Copy/20130524 Table.jpg が異なります

1 つのファイルはコピー内にのみ存在し、元の​​フォルダーには存在しないことがわかります。

/Users/melissa/Desktop/TMO のみコピー: Account Info.jpg

また、テキスト ファイルの内容が対応するファイルと異なることもわかりました。

7c7,9
< 表示されるウィンドウでルールを設定します
\ ファイル末尾に改行がありません
---
> 表示されるウィンドウでルールを設定します
>
> テキストが異なる
\ ファイル末尾に改行がありません

(どのように表示されるかを示すために、そのうちの 1 つに「テキストが異なります」と入力しました。)

これだけでもかなり便利ですが、さらに便利に使えるオプションもいくつかあります。例えば、「-r」オプションを使うと、すべてのサブフォルダを強制的に検索できます。

diff -r [フォルダ1へのパス] [フォルダ2へのパス]

もう一つよく使われる選択肢は「-q」です。これは、ファイルの違いの有無のみを示し、違いの内容は示さない、より簡略化されたテキストを出力します。これにより、結果がはるかに読みやすくなります。もちろん、「-r」オプションと組み合わせることもできます。

diff -rq [フォルダ1へのパス] [フォルダ2へのパス]

さらに、フォルダーの代わりにいくつかのファイルをターミナルにドラッグすることで、diffを使用してファイルを比較することもできます。

これによって、どの行がどのように異なるかがわかります。

最後に、多くのターミナルコマンドと同様に、結果をターミナルウィンドウだけでなくファイルにも送信できます。ファイルの方が読みやすく操作も簡単ですが、パスなどの知識が少し必要です。そのためには、パイプ(「>」)コマンドを次のように使用します。

diff -rq [フォルダ1へのパス] [フォルダ2へのパス] > /Users/[ユーザー名]/Desktop/comparison.txt

複雑そうに見えますが、英語に訳すと「ここにリストした2つのフォルダを比較し、結果をデスクトップのcomparison.txtというファイルに送信する」となります。上記のようにパイプを1つ(「>」)使用すると、ターミナルは既存の同じ名前のファイルを上書きします。一方、パイプを2つ(「>>」)使用すると、ターミナルは既存のファイルに追加します。つまり、複数の異なるフォルダを比較し、結果を同じファイルにパイプ出力することができます。その際、毎回二重パイプを使用することで、テキストを置き換えるのではなく、強制的に追加することができます。

かっこいいでしょう?全然怖くないですよね?ええ、ターミナルは人によってはちょっと怖いかもしれませんね。昔、Zorkのようなテキストベースのアドベンチャーゲームをプレイしていたことを思い出す人もいると思いますが、グルーに食べられることはありませんよ、約束します。

Knowledge Network