perl 脚本实现简单搜索修改文件并生成diff文件

在已有代码上修改代码一般要生成diff文件来生成patch,从而porting到相关baseline上。

修改文件较少时可以一个个来生成,但是当修改文件较多时就会很耗费工时,所以就想

写一个脚本来减少工时消耗。你只需要关注coding,而不必担心diff文件的生成。

实现的思想只要是:首先搜索以".orig"结尾的文件(这可以通过vim中设置来自动生成),

然后截断.orig来获得修改后的文件。从而生成已"*.diff"结尾的diff文件也可以成为patch。

当把这三个相关文件复制到一个专门存放code文件夹中时,要考虑在coding文件夹中创建

相关目录,目录只能是一级一级创建。所以要用到split来分割。

具体实现如下:

[python] view plaincopy
 
 1 #!/usr/bin/perl  
 2   
 3   
 4 # create a direction to save coding files  
 5 $code = "./coding";  
 6 if(-d $code)  
 7 {  
 8      print "Direction $code already existed. Remove it
";  
 9      `rm -rf $code`;  
10 }  
11 print  "create $code direction
";  
12 `mkdir $code`;  
13   
14   
15 #Find orig file and modifed file for mkdir diff file  
16 foreach $orig_file_name (`find . -name "*.orig" -size +0c`){  
17     chomp ($orig_file_name);  
18     $file_name = substr($orig_file_name, 0, index($orig_file_name, ".orig"));  
19     if(-f $file_name)  
20     {  
21         $diff_file_name = $file_name.".diff";  
22         print "find $file_name
";  
23         print "find $orig_file_name
";  
24         print "create $diff_file_name
";  
25         `diff -c $orig_file_name $file_name > $diff_file_name`;  
26          
27         @dTree = split(///, $orig_file_name);  
28         $a = @dTree;  
29         $d = $code;  
30         for($i = 1; $i < $a - 1; $i++)  
31         {  
32             $d = "$d/$dTree[$i]";  
33             `mkdir $d`;  
34         }  
35         print "create $d
";  
36         print "copy $file_name, $orig_file_name, $diff_file_name to $d
";  
37         `cp $file_name $d`;  
38         `cp $orig_file_name $d`;  
39         `cp $diff_file_name $d`;  
40     }  
View Code
  
原文地址:https://www.cnblogs.com/VincentLEcho/p/4105455.html