同じファイルのリストを持つ2つのディレクトリがあります。 diff
コマンドを使用して、両方のディレクトリに存在するすべてのファイルを比較する必要があります。それを実行するための簡単なコマンドラインオプションはありますか、それともファイルリストを取得してからそれらを繰り返すためにシェルスクリプトを書かなければなりませんか?
そのためにはdiff
コマンドを使用できます。
diff -bur folder1/ folder2/
これは、統一されたコンテキストで、スペースを無視する再帰的差分を出力します。
異なるファイルを見ることだけに興味がある場合は、次のようにします。
diff -qr dir_one dir_two | sort
オプション "q"は異なるファイルのみを表示し、異なるコンテンツは表示しません。 "sort"は出力をアルファベット順に並べます。
Diffには-r
というオプションがありますが、これはそれを行うためのものです。
diff -r dir1 dir2
diff
は2つのファイルを比較できるだけでなく、-r
オプションを使用してディレクトリツリー全体を調べ、各ツリーの比較可能な点で発生するサブディレクトリとファイルの違いを再帰的にチェックすることもできます。
$ man diff
...
-r --recursive
Recursively compare any subdirectories found.
...
GNU diffの場合は、2つのディレクトリを指定して-rオプションを使用することができます。
そうでなければ、使用してみてください
for i in $(\ls -d ./dir1/*); do diff ${i} dir2; done
N.B.コメントセクションでDennisによって指摘されたように、あなたは実際にlsの上でコマンド置換をする必要はありません。私はオートパイロットでこれをやっていて、比較のために私のファイルのリストを得るために必要なコマンドを代用しているので、私は長い間これをしてきました。
また、GNU lsによって返されたリストからカラーフォーマット情報が失われるように、l [私のエイリアス_ GNU lsを一時的に無効にするために '\ ls'を実行することを忘れていました。
これは、2つのフォルダ内のファイル間の違いを示すスクリプトです。それは再帰的に働きます。 dir1とdir2を変更してください。
(search() { for i in $1/*; do [ -f "$i" ] && (diff "$1/${i##*/}" "$2/${i##*/}" || echo "files: $1/${i##*/} $2/${i##*/}"); [ -d "$i" ] && search "$1/${i##*/}" "$2/${i##*/}"; done }; search "dir1" "dir2" )