首先,我尝试在 askubuntu 上问同样的问题,但我并没有走得太远...... https://askubuntu.com/questions/186114/how-to-diff-two-folders-to-multiple-patch-files/ 186121#comment231985_186121
所以,我会在这里复制/粘贴,希望能给我一个可行的解决方案......
我不是一个 unix 人,所以我会继续问:
我有以下问题 - 两个包含大量子文件夹的文件夹。我需要区分它们。
我试过这个:
diff -drupN vanila_kernel_3.0.8 my_kernel_3.0.8 > kernel.patch
这会产生一个 185mb 的文件......并不是我真正想要的。
我希望差异的结果是许多较小的补丁,理想情况下,每个已更改的文件都有一个包含更改内容的补丁。这意味着我必须改变我使用差异的方式,我需要把它放在某种循环中......所以我尝试运行这个小脚本
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 文件。如果补丁可以在补丁//file_name.c.patch 中结束,那就太好了……
如果你给我 PERL 脚本,请告诉我如何最好地使用它们,因为我不明白那些垃圾。请不要让我失望。我需要移植、测试和运行这个东西,我在 unix 命令和无形脚本 ffs 上浪费时间。