我在文件夹层次结构和特定文件名符号和扩展名中组织了大量文件。我需要做的是编写一个程序来遍历文件树,并基本上重命名和重新组织它们。我还需要生成一份关于变更组织的变化和信息的报告以及统计数据。
我可以看到的解决方案是像任何其他树数据结构一样遍历文件树,并在文件的路径名上使用正则表达式。这似乎非常可行,而且工作量不大。我的问题是,除了C#和正则表达式之外,我应该使用哪些工具? Perl浮现在脑海中,因为我知道它最初是为报告生成而设计的,但我没有使用该语言的经验。而且,正在使用正则表达式这种情况是可行的,因为我只使用它来处理文件CONTENTS而不是文件名和组织。
答案 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中找到该工具。