perl批量处理文件 .
2014-06-22 17:29 G-Spider 阅读(612) 评论(0) 收藏 举报############################################################################### # fileGs # 功能: 将指定目录下所有.c和.h文件的tab转成空格、删除行尾空字符 # 说明: 此脚本提供了批量处理文件的方法,修改单行线之间的内容可以完成不同的功能 # ------------------------------------------------------------By G-Spider @2014 ############################################################################### #!/usr/bin/perl use strict; use File::Find; use File::Copy; #============================================================================== # tab 所占字节数,根据实际情况调整,一般设为8或4 my $TABLEN = 4; # 目录请使用单引号包含,可包含多个目录,逗号分隔 my @AllDir = ( 'E:\test', ); #============================================================================== foreach (@AllDir){ find(\&underscores,$_); } print "all complete.\n"; #============================================================================== sub underscores{ next if -d $_; next unless /(\.c$)|(\.h$)/; my $oldfile = $_; my $newfile = "$_.".int(rand(1000)).'.tmp'; my $flag = 0; unlink glob '*.tmp'; open (my $hout ,">>", $newfile) or die $!; open (my $hin ,"<" , $oldfile) or die $!; for (<$hin>){ #-------------------------------------------------------------------------- while (/(\t)/g){ my $curindex = pos; my $tmp = ' ' x (($curindex % $TABLEN) ? ($TABLEN + 1 - $curindex % $TABLEN) : 1); s/(\t{1})/$tmp/; $flag |= 1; } $flag |= 2 if s/[ \t]+$//; print $hout $_; #-------------------------------------------------------------------------- } close $hout; close $hin; if ($flag){ chmod 0755, $oldfile; copy($newfile, $oldfile); print "$oldfile modify complete. %%%%%%%%%%%%% code [$flag]\n"; } else{ print "$oldfile isn't change.\n"; } unlink $newfile; } 1;