私は2つのディレクトリを持っていました、directory
そしてdirectory.original
。1つの大きなパッチではなく、それぞれの異なるディレクトリからパッチを作成するために、どのサブディレクトリが異なるのかを知りたいです。
1 に答える
おそらくそれはよりエレガントな方法ではなく、ソースコードにパッチを適用しようとしているときにうまく機能することがわかりました。
diff -qr directory directory.original | cut -d' ' -f2 | xargs dirname | uniq
このコードを少し調べてみましょう。
diff -qr dir dir.original
:両方のディレクトリを簡単なフラグ(-q
)と比較します。これにより、diffは実際のdiffを出力せず、代わりにファイルを投稿します。これ-r
は、diffingをそのサブディレクトリに再帰的にすることです。cut -d' ' -f2
:のデフォルト出力diff -qr
は次のようになります。Files dir/file1 and dir.original/file1 differ
Files dir/sub-dir/file2 and dir.original/sub-dir/file2 differ
Files dir/sub-dir/file3 and dir.original/sub-dir/file3 differ
この
cut
コマンドを使用して、区切り文字をスペース(-d' '
)として選択し、次に2番目のフィールド(この場合は)を選択しますdir/file1
。xargs dirname
:dirname
ファイル名を削除できるように、「行」ごとにコマンドを実行します。これで、、、ができましdir
た(そのサブディレクトリには2つの異なるファイルがあったため)。dir/sub-dir
dir/sub-dir
uniq
:複数の異なる(サブ)ディレクトリがある場合は、1つだけリストしてください。
実際にパッチを作成するときは注意が必要です。大きなパッチを作成するため-r
、ルート()でフラグを使用しないでください。dir/
directories=$(diff -qr directory directory.original | cut -d' ' -f2 | xargs dirname | uniq)
for dir in $directories; do
subdirectory=$(basename $dir)
echo "+ $dir"
diff -Naur directory.original/$subdirectory directory/$subdirectory > ${$subdirectory}.patch
done