1. 序章

2つのディレクトリを比較することは非常に一般的なタスクです。 違いを見つけることに興味を持った理由はたくさんあります。 たとえば、通常、問題が発生したときに以前の状態と比較して何が変化したかを把握する必要があります。

このチュートリアルでは、Linuxで2つのディレクトリを比較する方法を学習します。 システムで使用できる手段に応じて、いくつかの方法でディレクトリを比較できます。

2. 設定

このチュートリアルでは、 /tmpフォルダー内にサンプルディレクトリを用意します。

Dir1                             Dir2    
├── client.log                   ├── client.log
├── file01                       ├── file01
├── file02                       ├── file02
├── file03                       ├── file03
│                                ├── file04
├── server.log                   ├── server.log
├── subdir1                      ├── subdir1
│   ├── file11                   │   ├── file11
│   └── file12                   │   └── file12
├── subdir2                      └── subdir2
│   ├── file21                       ├── file21
│   └── file22                       ├── file22
└── subdir3                          └── file23
    ├── file31
    └── file32

サンプルディレクトリには、比較によって検出されるはずのあらゆる種類の違いがあります。同一のアイテム、異なるアイテム、およびアイテムは一方のディレクトリにのみ存在し、もう一方のディレクトリには存在しません。 このようにして、以下の比較ツールの出力を追跡し、結果をより簡単に解釈できるようになります。

3. コマンドラインユーティリティ

まず、ほとんどの場合、最も古いLinuxユーティリティの1つである diff を使用して、ディレクトリの違いを知ることができます。 通常、ファイルの内容を比較することを目的としたdiffユーティリティは、ディレクトリも比較できます。 それには多くのオプションがあり、そのうちの2つが私たちのケースに最も関連しています。 これらは次のとおりです。–brief はさまざまなファイルのコンテンツに関する詳細を非表示にし、 –recursiveはすべてのサブディレクトリの違いを示します。

diff --brief --recursive Dir1 Dir2
Files Dir1/client.log and Dir2/client.log differ
Files Dir1/file02 and Dir2/file02 differ
Files Dir1/file03 and Dir2/file03 differ
Only in Dir2: file04
Files Dir1/subdir1/file12 and Dir2/subdir1/file12 differ
Files Dir1/subdir2/file22 and Dir2/subdir2/file22 differ
Only in Dir2/subdir2: file23
Only in Dir1: subdir3

diff ユーティリティのもう1つの便利なオプションは、 –exclude です。これにより、比較の範囲内で関心のないアイテムを除外できます。 上記の例からすべての*。logファイルを除外するには、コマンドに –exclude=’*。log’を追加します。

diff --brief --recursive Dir1 Dir2 --exclude '*.log'
Files Dir1/file02 and Dir2/file02 differ
Files Dir1/file03 and Dir2/file03 differ
Only in Dir2: file04
Files Dir1/subdir1/file12 and Dir2/subdir1/file12 differ
Files Dir1/subdir2/file22 and Dir2/subdir2/file22 differ
Only in Dir2/subdir2: file23
Only in Dir1: subdir3

ここで覚えておくべきことの1つは、 diff ユーティリティがコンテンツごとにファイルを比較することです。これにより、大量の比較データで大幅な遅延が発生する可能性があります。

4. ターミナルファイルマネージャー

ディレクトリ比較機能は、いくつかのファイルマネージャでも利用できます。 Midnight Commander で、 Command / Compare Directories メニュー項目を選択するか、 Ctrl-x d ショートカットを選択して、マネージャーのファイルパネルに表示されるディレクトリを比較します。 。 さまざまなアイテムが選択済みとして表示されます。

制限は再帰的に作成されないことですが、クイック、 サイズのみ、および完全オプションから選択できます。それぞれタイムスタンプ、サイズ、およびコンテンツ。

vifm ファイルマネージャーでのディレクトリ比較はより高度で、デフォルトでは再帰的です。 左側のパネルと右側のパネルのディレクトリの違いを確認するには、ファイルマネージャの内部:compareコマンドを使用します。 その結果、さまざまなエントリが強調表示され、欠落しているエントリが点線で表示されます。

5. GUIアプローチ

システムでグラフィカルデスクトップが利用できる場合は、さらに高度なユーティリティを使用できます。 Meld は、機能が豊富な比較ツールです。 比較の結果は非常に視覚的です。比較のどちらの側からでも、異なるアイテムや見逃したアイテムを簡単に特定できます。

また、この時点で、特定のファイル名をダブルクリックすることで、各ファイルのファイル内容の違いを追跡することができます。 フィルタリングオプションも利用できます。

最後になりましたが、コンテンツまたはサイズによる比較とタイムスタンプのみを選択できます。これにより、比較の速度が大幅に向上する可能性があります。

6. 結論

この短いチュートリアルでは、Linuxでディレクトリを比較する方法をいくつか学びました。

最初に、すべてのLinuxシステムに適用可能なCLIアプローチを示しました。 次に、高度なソフトウェアを使用したより視覚的な方法を検討しました。 また、比較パフォーマンスに影響を与える可能性のある要因についても取り上げました。