回答:
diff
そのためのコマンドを使用できます。
diff -bur folder1/ folder2/
これは、スペースを無視する再帰的な差分を、統一されたコンテキストで出力します。
-b
空白の変更を無視して-u
3行のバッファーを提供します。
diff -rub folder1/ folder2/
-bur
あなたは寒冷な気候に住んでいたならば覚えやすいでしょう。
異なるファイルのみを表示したい場合は、以下を使用できます。
diff -qr dir_one dir_two | sort
オプション "q"は異なるファイルのみを表示しますが、異なるコンテンツは表示しません。 "sort"は出力をアルファベット順に並べます。
diff
異なるファイルの各ペアに。1つまたは2つのファイルのみが異なる場合と数十のファイルが異なる場合のアプローチは大きく異なります。diff
一度に数十のファイルを処理すると、出力が失われる可能性があります。
-x PATTERN
特定のサブディレクトリを除外するコマンドに含めることができます。たとえば、diff -qr repo1 repo2 -x ".git"
2つのディレクトリ(repo1とrepo2)を比較しますが、それぞれのディレクトリの.gitフォルダー内のファイルは除外します。
GNU diffの場合は、2つのディレクトリを指定して、-rオプションを使用できます。
それ以外の場合は、
for i in $(\ls -d ./dir1/*); do diff ${i} dir2; done
注:Dennisがコメントセクションで指摘したように、実際にはlsでコマンド置換を行う必要はありません。私はこれを長い間行ってきたので、オートパイロットでこれをほぼ実行し、比較のためにファイルのリストを取得するために必要なコマンドを置き換えています。
また、「ls」を使用してGNU lsに対するlsのエイリアスを一時的に無効にし、GNU lsによって返されたリストからカラーフォーマット情報を失うことを忘れてしまいました。
ls
:for i in ./dir1/*
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" )
特にファイルの内容を比較せず、どちらのディレクトリにも存在しないもののみを確認する場合は、別のコマンドで生成されたファイルのリストを比較できます。
diff <(find DIR1 -printf '%P\n' | sort) <(find DIR2 -printf '%P\n' | sort) | grep '^[<>]'
-printf '%P\n'
find
出力パスの前にルートディレクトリを付けないように指示します。
またsort
、の両方の呼び出しでファイルの順序が同じになるように追加しましたfind
。
grep
終了時には、同一の入力ラインについての情報を除去します。
これを試して:
diff -rq /path/to/folder1 /path/to/folder2
diff
のGNUユーティリティをダウンロードして、コマンドにアクセスできます。