0

私は2つのディレクトリを持っていました、directoryそしてdirectory.original。1つの大きなパッチではなく、それぞれの異なるディレクトリからパッチを作成するために、どのサブディレクトリが異なるのかを知りたいです。

4

1 に答える 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 dirnamedirnameファイル名を削除できるように、「行」ごとにコマンドを実行します。これで、、、ができましdirた(そのサブディレクトリには2つの異なるファイルがあったため)。dir/sub-dirdir/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
于 2013-02-03T22:14:38.630 に答える