perl 遍歷指定目錄下的所有文件,替換指定文本內容,返回受影響的文件路徑
阿新 • • 發佈:2018-07-07
change argv 文件路徑 () 關鍵字 ror $nf pen elsif
不會讀取 影藏文件
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\n"; 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, "$_\n"; } chomp @data; # 砍掉最後的 \n 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\n"; } } } } } scan_file($path);
perl 遍歷指定目錄下的所有文件,替換指定文本內容,返回受影響的文件路徑