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\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);

原文地址:https://www.cnblogs.com/ajanuw/p/9275767.html

时间: 2024-08-05 02:52:59

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

java-IO流(File对象-深度遍历指定目录下的文件夹和文件)

需求:遍历这个树状结构 File(String pathname) '\\'为了转义'\' // 通过抽象路径pathname 创建一个新的文件或者目录 File parent = new File("E:\\Test\\aa"); // exists 判断文件或目录是否存在:存在为true if(!parent.exists()){ // mkdirs 创建多级目录 parent.mkdirs(); } import java.io.File; public class Test {

PHP遍历指定目录下的文件以及文件夹

这个东西在网上找了很久才找到..但是关于去除.和..烦有点不懂额..于是就把那个判断去掉了,改成了str_replace的形式. <?php//定义变量 $n1=array(".",".."); $n2=array("",""); //定义要打开的目录为 upload $dir = "upload/"; //打开目录并遍历所有文件及去除个别文件夹 if (is_dir($dir)) { if ($dh

复制指定目录下的指定文件,并修改后缀名 很重要,也很难!!!

package cn.idcast2; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.FilenameFilter; im

c# 获取指定目录下的所有文件并显示在网页上

参考文献: FileInfo 的使用  https://msdn.microsoft.com/zh-cn/library/system.io.fileinfo_methods(v=vs.110).aspx 网页表格的生成  http://www.w3school.com.cn/html/html_tables.asp C# 通过文件扩展名获取图标和描述 http://www.csframework.com/archive/2/arc-2-20110514-1478.htm   http://ww

iOS案例:读取指定目录下的文件列表

// // main.m // 读取指定目录下的文件列表 // // Created by Apple on 15/11/24. // Copyright © 2015年 Apple. All rights reserved. // /* *读取指定目录下的文件列表 */ #import <Foundation/Foundation.h> void myQuickMethod(); int main(int argc, const char * argv[]) { //文件操作对象 NSFil

php删除指定目录下的相关文件实例

在php中删除文件最简单的办法直接使用unlink命令,但本文章介绍的是需要删除指定目录下的指定文件,所以我需要遍历删除了,具体看这个例子.  代码如下 复制代码 <?php //删除指定文件夹下的非法文件 function my_del($dir)  {     if(is_dir($dir)){         //打开指定文件夹         if($handle = opendir($dir))         {             while(false !== ($file

Lua 遍历Linux目录下的文件夹

代码如下,里面有注释,应该能看懂. function getFile(file_name) local f = assert(io.open(file_name, 'r')) local string = f:read("*all") f:close() return string end function writeFile(file_name,string) local f = assert(io.open(file_name, 'w')) f:write(string) f:cl

在指定目录下找文件

import os # 查找当前目录下所有包含关键字的文件 def findFile(path, filekw): return[os.path.join(path,x) for x in os.listdir(path) if os.path.isfile(x) and os.path.split(x)[1].find(filekw)>-1] # 获取指定目录下的次级目录 def findDir(path1): return[os.path.join(path1,x) for x in os.

JAVA输出指定目录下的子目录和子文件

题目:给定一个目录,要求输出这个目录下面的子目录和子文件 逻辑: 先判断给定的是不是一个合法的目录,如果不是,则提示给定错误 如果是目录,那么使用File.listFile()获得这个目录下文件名的数组 循环遍历输出这个数组元素 输出名称之后,接着判断这个元素是文件还是目录 如果是目录,继续调用本方法来输出子目录 代码如下: /** * 输出指定目录下的所有子目录和子文件 * * @author DXY * */ public class HelloFile { public static vo