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
grep
を使用し、並べ替える必要はありません。
grep -Fxvf file2 file1 > diff_file
file1にあるがfile2にない行を返します(file2にない行)。
私はsortとdiffを使用してみます:
$ diff <(sort csv1.txt) <(sort csv2.txt)
4d3
<
8d6
< /docs/yellow
このような比較には、通常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
comm
コマンドは、この種の質問に答えるように設計されています。 2つのソートされたファイルを入力として受け取り、3つのテキスト列を出力します。file1に固有の行、file2に固有の行、両方のファイルに共通の行です。これら3つの列のいずれかを非表示にできます。
あなたの場合、次のようなものが必要です:
comm <(sort file1) <(sort file_2) -3 --output-delimiter=''
file1
とfile_2
を比較し、存在する差異を標準出力に出力します。 -23
に固有の行だけが必要な場合はfile1
(列2および3を非表示)、-13
に一意の行のみが必要な場合はfile_2
(列1および3を非表示)を使用します
あなたの本当の質問が2つのマウントされたファイルシステムを比較する方法であるなら、私はrsync
を使用します。
参照: Rsyncはディレクトリを比較しますか?UnixおよびLinuxの場合
-n
(--dry-run
)を使用して、実際にファイルをコピーしないようにすると、出力が異なります。これは、デフォルトでは、あるファイルが別のファイルよりも新しいかどうか、つまり内容が変更されたかどうかも表示します。ファイルの内容を無視するように設定できると確信しています。