perl 遍历指定目录下的所有文件,替换指定文本内容,返回受影响的文件路径

Posted ajanuw

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了perl 遍历指定目录下的所有文件,替换指定文本内容,返回受影响的文件路径相关的知识,希望对你有一定的参考价值。

不会读取 影藏文件

main

#!/usr/bin/perl
my ($path, $rp) = @ARGV;

sub search_file{
    my ($fname, $rp) = @_; # 获取操作文件名 和 查询的正则
    my ($o) = split("/", $rp);
    open(of, "<$fname") or die "$fname 文件打开失败!$!";
    while(<of>){
        chomp;
        if($_ =~ /$o/){
            print "$fname
";
            return 1;
        }
    }
    return 0;
}

sub change_file{
    my ($fname, $rp) = @_; # 获取操作文件名 和 替换的正则
    if( !search_file($fname, $rp) ){ # 不存在关键字直接返回
       return 0;
    }

    my @data = ();
    my ($o, $n) = split("/", $rp);
    open(of, "<$fname") or die "$fname 文件打开失败!$!";
    while(<of>){
        chomp;
        $_ =~ s/$o/$n/;
        push @data, "$_
";
    }

    chomp @data; # 砍掉最后的 

    open(wf, "+>$fname") or die "Error: 文件$nfname打开失败$!";
    print wf @data;
    return 1;
}

my @change_files = (); # 受到影响的文件

sub scan_file{
    my @files = glob(@_[0]);
    foreach (@files){
        if(-d $_){
            my $path = "$_/*";
            scan_file($path);
        }elsif(-f $_){
            if( change_file($_, $rp) ){
                push @change_files, $_;
            }
        }
    }
}

scan_file($path);

执行

读取文本, world替换为ajanwu

λ perl main "./test/*" world/ajanuw
./test/dist/bundle.html
./test/src/index.html

读取指定类型文件

修改下 scan_file 函数

my $path = "./test/*";
my @suffix_names = qw[.css .html];

sub scan_file{
    my @files = glob(@_[0]);
    foreach (@files){
        if(-d $_){
            my $path = "$_/*";
            scan_file($path);
        }elsif(-f $_){
           my $fname = $_;
           foreach (@suffix_names){
               if($fname =~ m/$_$/){
                   print "$fname
";
               }
           }
        }
    }
}

scan_file($path);

以上是关于perl 遍历指定目录下的所有文件,替换指定文本内容,返回受影响的文件路径的主要内容,如果未能解决你的问题,请参考以下文章

php遍历输出文件夹内包含指定关键字图片

python3.7脚本---遍历指定目录内所有文件

python读取指定目录中所有文本文件的第一行,并以此为该文本文件名重命名

如何使用perl遍历一个目录下的所有文件

sh bash快捷方式,用于在指定目录下的所有文件中查找和替换字符串

用shell脚本递归遍历某个目录下的所有文件并移动到某个指定的目录中