Sha*_*ark 6 command-line bash scripts diff
我不是一个 unix 人,所以我会继续问:
我有以下问题 - 两个文件夹有很多子文件夹。我需要区分它们。
我试过这个:
diff -drupN vanila_kernel_3.0.8 my_kernel_3.0.8 > kernel.patch
Run Code Online (Sandbox Code Playgroud)
这导致了一个 85mb 的文件......并不是我想要的。
我希望 diff 的结果是许多较小的补丁,理想情况下,每个包含更改内容的已更改文件都有一个补丁。这意味着我没有改变我使用 diff 的方式,我需要把它放在某种循环中......所以我尝试运行这个小脚本
for file in original_308/*.*; do
diff -dupN "$file" "my_308/${file##*/}" > "$file".patch
done
Run Code Online (Sandbox Code Playgroud)
但它不起作用:/
理想情况下,我希望每个更改都有一个 .patch 文件,但是为原始更改的文件提供补丁就可以了(因为我可以过滤新添加的文件并复制它们)
有人可以为我提供一个体面的方法来做到这一点吗?
编辑:
这是 choroba 要求我发布的内容
diff -Naur -x '*.o' -x '*.cmd' -x '*.d' original_308/arch/arm/boot/compressed/head.S my_308/arch/arm/boot/compressed/head.S
--- original_308/arch/arm/boot/compressed/head.S 2011-10-25 07:11:12.000000000 +0200
+++ my_308/arch/arm/boot/compressed/head.S 2012-07-04 03:57:25.000000000 +0200
@@ -656,6 +656,8 @@
@ b __arm6_mmu_cache_off
@ b __armv3_mmu_cache_flush
Run Code Online (Sandbox Code Playgroud)
所以是的,即使 gedit/geany 无法打开它,它也是正确的输出。UltraEdit 确实...
您可以使用创建巨大差异文件的原始格式,随后可以将其拆分为小文件。csplit您可能对拆分感兴趣,或者您可以使用 Perl 等脚本语言:
perl -ne 'if(/^diff -drupN (.*) (.*)/) {
my $f = $1;
$f =~ s{/}{_}g;
open $FH, ">", "$f.patch" or die $!;
} else {
print {$FH} $_;
}' kernel.patch
Run Code Online (Sandbox Code Playgroud)
如果您需要diff每个文件中的行,请print在open.
| 归档时间: |
|
| 查看次数: |
4440 次 |
| 最近记录: |