我有一个包含数百个文件的目录或文件夹。它们按字母顺序命名和排列。我想根据文件名称的第一个字符将文件移动到目录或文件夹中(即文件以a
一个文件夹开头,文件以r
另一个文件夹开头,等等)。
有没有办法在不使用CPAN
模块的情况下做到这一点?
文件都在那个文件夹中,还是在子文件夹中?如果它们都在一个文件夹中,您可以使用opendir访问该目录,然后使用readdir读取文件名并将它们复制到其他地方(使用File::Copy模块的move
orcopy
函数。
use strict;
use warnings;
use autodie;
use File::Copy; #Gives you access to the "move" command
use constant {
FROM_DIR => "the.directory.you.want.to.read",
TO_DIR => "the.directory.you want.to.move.the.files.to",
};
#Opens FROM_DIR, ao I can read from it
opendir my $dir, FROM_DIR;
# Loopa through the directory
while (my $file = readdir $dir) {
next if ($file eq "." or $file eq "..");
my $from = FROM_DIR . "/" . "$file";
move $from, TO_DIR;
}
这并不完全符合您的要求,但它应该给您这个想法。基本上,我正在使用opendir
和readdir
读取目录中的文件,并且我正在使用move
将它们移动到另一个目录。
我使用了该File::Copy
模块,但它包含在所有 Perl 发行版中,因此它不是必须安装的CPAN 模块。
使用glob()
, 或内置File::Find
为每个起始字母构建文件列表。