web-dev-qa-db-ja.com

2つのファイルの内容を比較する

2つのハードドライブからのすべてのファイルパスのリストを含む2つのファイル(まったく同じであると仮定)があり、そのうちの1つにファイルが欠けていると思います。両方のリストにはファイルのパスとサイズがありますが、リストの順序は同じではありません(以下の例を参照)。

2つのファイルの違いを比較し、その違いを新しいファイルに出力できるコマンドはありますか?

例:

file1:

/docs/red
/docs/blue
/docs/yellow
/docs/green

file_2:

/docs/blue
/docs/green
/docs/red

Difference_File:

/docs/yellow
5
impact_it

grepを使用し、並べ替える必要はありません。

grep -Fxvf file2 file1 > diff_file

file1にあるがfile2にない行を返します(file2にない行)。

8
αғsнιη

私はsortとdiffを使用してみます:

$ diff <(sort csv1.txt) <(sort csv2.txt)
4d3
< 
8d6
< /docs/yellow
6
user822833

このような比較には、通常meld(非常に便利な視覚的な差分ツール)を使用します。

Meldのインストール:

Sudo apt-get install meld

ソートしてから比較します:

sort csv1.txt > csv1-sorted.txt
sort csv2.txt > csv2-sorted.txt
meld csv1-sorted.txt csv2-sorted.txt 
4
Colin Ian King

commコマンドは、この種の質問に答えるように設計されています。 2つのソートされたファイルを入力として受け取り、3つのテキスト列を出力します。file1に固有の行、file2に固有の行、両方のファイルに共通の行です。これら3つの列のいずれかを非表示にできます。

あなたの場合、次のようなものが必要です:

comm <(sort file1) <(sort file_2) -3 --output-delimiter=''

file1file_2を比較し、存在する差異を標準出力に出力します。 -23に固有の行だけが必要な場合はfile1(列2および3を非表示)、-13に一意の行のみが必要な場合はfile_2(列1および3を非表示)を使用します

3
Tacroy

あなたの本当の質問が2つのマウントされたファイルシステムを比較する方法であるなら、私はrsyncを使用します。

参照: Rsyncはディレクトリを比較しますか?UnixおよびLinuxの場合

-n--dry-run)を使用して、実際にファイルをコピーしないようにすると、出力が異なります。これは、デフォルトでは、あるファイルが別のファイルよりも新しいかどうか、つまり内容が変更されたかどうかも表示します。ファイルの内容を無視するように設定できると確信しています。

1
Zak