最初に、askubuntuで同じことを尋ねてみましたが、そこまでは行きません... https://askubuntu.com/questions/186114/how-to-diff-two-folders-to-multiple-patch-files/ 186121#コメント231985_186121
だから、ここにコピーして貼り付けて、SOが実用的な解決策を提供してくれることを願っています...
私は UNIX にあまり詳しくないので、次のように質問します。
次の問題があります-たくさんのサブフォルダーを持つ2つのフォルダー。私はそれらを区別する必要があります。
私はこれを試しました:
diff -drupN vanila_kernel_3.0.8 my_kernel_3.0.8 > kernel.patch
その結果、185MBのファイルが生成されます...そして、私が本当に望んでいるものではありません。
diff の結果を多くの小さなパッチにする必要があります。理想的には、変更の内容を含む変更されたファイルごとに 1 つです。つまり、diff の使用方法を変更する必要があり、何らかのループに入れる必要があるということです。この小さなスクリプトを実行してみました。
for file in original_308/*.*; do
diff -dupN "$file" "my_308/${file##*/}" > "$file".patch
done
しかし、うまくいきません:/
理想的には、変更ごとに .patch ファイルを作成したいのですが、オリジナルで変更されたファイルにパッチを適用しても問題ありません (新しく追加されたファイルをフィルター処理してコピーするだけでよいため)。
誰かがこれを行うためのまともな方法を私に提供できますか?
更新: これらのフォルダーと 4546 の新しく追加されたファイルの間に 231 個の変更されたファイルがあることを知っています...私はそれらの 231 個のパッチを生成することに興味があります。スクリプトでも使用できるように、これらの 231 個のファイル名を含むファイルもあります。
これを使用して変更ログを生成しました
diff -qdr -x *.o -x *.cmd -x *.d original_308 my_308 | sed "s/^.* and \(.*\) differ/\1/" | sort > changes.txt
そして、変更されたファイル名を出力し、「my_308のみ」ファイルが続きます... 231個のファイルがそのファイルの先頭にあります(最初の231行)
明確にしましょう。ソース ファイルには .patch ファイルが必要です。パッチが patchs//file_name.c.patch で終わることができれば、それは本当に素晴らしいことです...
もし私にPERLスクリプトをくれたら、私はそのゴミを理解していないので、それらを最もよく使う方法を教えてください. 私を失望させないでください。私はこれを移植し、テストし、実行する必要があり、UNIX コマンドと実体のないスクリプト ffs に時間を浪費しています。