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 遍历指定目录下的所有文件,替换指定文本内容,返回受影响的文件路径的主要内容,如果未能解决你的问题,请参考以下文章
python读取指定目录中所有文本文件的第一行,并以此为该文本文件名重命名