使用正则表达式重组大量文件?

时间:2011-09-22 20:35:58

标签: regex perl file tree

我在文件夹层次结构和特定文件名符号和扩展名中组织了大量文件。我需要做的是编写一个程序来遍历文件树,并基本上重命名和重新组织它们。我还需要生成一份关于变更组织的变化和信息的报告以及统计数据。

我可以看到的解决方案是像任何其他树数据结构一样遍历文件树,并在文件的路径名上使用正则表达式。这似乎非常可行,而且工作量不大。我的问题是,除了C#和正则表达式之外,我应该使用哪些工具? Perl浮现在脑海中,因为我知道它最初是为报告生成而设计的,但我没有使用该语言的经验。而且,正在使用正则表达式这种情况是可行的,因为我只使用它来处理文件CONTENTS而不是文件名和组织。

2 个答案:

答案 0 :(得分:2)

是的,Perl可以做到这一点。这里有一些非常简单的事情:

#! /usr/bin/env perl

use strict;
use warnings;

use File::Find;

my $directory = ".";   #Or whatever directory tree you're looking for...

find (\&wanted, $directory);

sub wanted {

    print "Full File Name = <$File::Find::name>\n";
    print "Directory Name = <$File::Find::dir>\n"; 
    print "Basename = <$_\n>";

    # Using tests to see various things about the file

    if (-f $File::Find::name) {
        print "File <$File::Find::name> is a file\n";
    }

    if (-d $File::Find::name) {
        print "Directory <$File::Find::name> is a directory\n";
    }

    # Using regular expressions on the file name

    if ($File::Find::name =~ /beans/) {   #Using Regular expressions on file names
        print "The file <$File::Find::name> contains the string <beans>\n";
    }
}

find命令获取目录,并为整个目录树中的每个文件和目录调用wanted子例程。由子程序决定如何处理该文件。

如您所见,您可以对文件执行各种测试,并使用正则表达式来解析文件的名称。您也可以根据自己的内容移动,重命名或删除文件。

Perl将完全按照您的意愿行事。现在,您所要做的就是学习它。

答案 1 :(得分:0)

如果您可以使用glob模式而不是正则表达式,mmv可能是一个选项。

> ls
a1.txt a2.txt b34.txt
> mmv -v "?*.txt" "#2 - #1.txt"
a1.txt -> 1 - a.txt : done
a2.txt -> 2 - a.txt : done
b34.txt -> 34 - b.txt : done

任何深度的目录也可以重组。查看manual。如果您运行Windows,则可以在Cygwin中找到该工具。