【发布时间】:2016-12-03 12:01:14
【问题描述】:
我在 Windows 机器上工作,我有一个目录,里面有大约 200k 的文件,我需要整理这些文件。这是我需要定期使用不同的文件名集但具有相似模式的工作,因此 perl 似乎是一个很好的工具。
每个文件名由{a string A}{2 or 3 digit number B}{single letter "r" or "x"}{3 digit number}.extension
我想为每个字符串 A 创建一个文件夹
在每个文件夹中,我希望每个 B 都有一个子文件夹
然后我想将每个文件移动到其相关的子文件夹中
所以它最终会看起来像
/CustomerA/1
/CustomerA/2
/CustomerA/3
/CustomerB/1
/CustomerB/2
/CustomerB/3
等每个子文件夹中的文件
所以 CustomerA888x123.xml 被移动到 /CustomerA/888/
我有一个数组中的文件列表,但我正在努力将文件名拆分为其组成部分并有效地使用这些部分。
感谢您的回答。我最终得到了这个:
#!usr/bin/perl
use warnings;
use strict;
use File::Copy qw(move);
use File::Path qw(make_path);
opendir my $dir, ".";
my @files = readdir($dir);
closedir $dir;
foreach my $file (@files) {
my ($cust, $num) = $file =~ m/(\D+)(\d+)/;
my $dirname = "$cust/$num";
my @dirs_made = make_path($dirname, { verbose => 1 });
move($file, $dirname) or warn "cant move $file to $dirname: $!";
}
【问题讨论】:
-
您必须展示您尝试过的程序,我们才能帮助您修复它
-
为了便于阅读,我编辑了您问题中的代码以添加一些缩进和空行。如果您不喜欢,请回滚——点击“edited ...”(在用户名上方),然后点击之前的“rollback”版本。
-
太好了,谢谢。我编写的代码中有空行和更大的缩进,但是当我将其作为注释粘贴时,格式有点梨形,所以我删除了空行,认为这会导致格式问题。再次,非常感谢。
标签: windows perl file directory