perl批量处理文件 .
################################################################################ 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;
页:
[1]