ディレクトリ内の 2 つのファイルが同一かどうかを確認します。

ディレクトリ内の 2 つのファイルが同一かどうかを確認します。

私は OSX で作業しており、ディレクトリ内に複数の CSV ファイルがあります。そのうちの 2 つが同一であるかどうかを確認したいと思います。

私はもう試した:

cmp file1.csv file2.csv || echo "files are different"

これは、最初の 2 つのファイルが異なることを示しています。

私も試しました:

 diff -q --from-file *.csv

これは、初めファイルは他のすべてのファイルとは異なります。

しかし、手動で行うことなく、すべてのファイルに対してこれを確認するにはどうすればよいですか?

答え1

私の場合、Linux では次の方法が使えます。Mac ターミナルがないので、そこで使えるかどうかテストできません。

$ md5sum * | sort | uniq --check-chars=32 --group
36da49e13da596245e85e9e47ab8a04f *y

8c3c2e6aa3be26d9f1bbbcd9a401e88e *x
8c3c2e6aa3be26d9f1bbbcd9a401e88e *z

このプログラムでuniqはソートされた入力が必要です。他の出力オプションについてはマニュアル ページを参照してください。

答え2

Steven の回答に加えて、ターミナルに以下を入力する必要があります。

shasum * | sort | uniq 

そして、結果が提供されるはずです。

答え3

本当に必要なのは、優れたシェル スクリプトです。 単純なシェル スクリプトは次のようになります。

for i in `ls`; do diff -sq --from-file=$i `ls` 2> /dev/null; done | grep identical

もちろん、これの問題は、すでにチェックが行われている場合でも、各ファイルを他のすべてのファイル (それ自体を含む) と比較することです。より少ないスペースで適切な処理を実行する優れた awk スクリプトがあるはずですが、現時点では awk らしいスクリプトは思いつきません。

diff のその他のオプションとして、空白が重要でない場合は -w、空白の存在は重要だが、空白の個数や種類は気にしない場合は -b、一部のファイルが改行と復帰の両方が必要であると判断するシステムで作成された場合は --strip-trailing-cr を使用することをお勧めします。

関連情報