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;

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值