3

我有一个包含数百个文件的目录或文件夹。它们按字母顺序命名和排列。我想根据文件名称的第一个字符将文件移动到目录或文件夹中(即文件以a一个文件夹开头,文件以r另一个文件夹开头,等等)。

有没有办法在不使用CPAN模块的情况下做到这一点?

4

2 回答 2

9

文件都在那个文件夹中,还是在子文件夹中?如果它们都在一个文件夹中,您可以使用opendir访问该目录,然后使用readdir读取文件名并将它们复制到其他地方(使用File::Copy模块的moveorcopy函数。

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;
}

这并不完全符合您的要求,但它应该给您这个想法。基本上,我正在使用opendirreaddir读取目录中的文件,并且我正在使用move将它们移动到另一个目录。

我使用了该File::Copy模块,但它包含在所有 Perl 发行版中,因此它不是必须安装的CPAN 模块。

于 2012-09-12T03:22:26.903 回答
0

使用glob(), 或内置File::Find为每个起始字母构建文件列表。

于 2012-09-12T00:26:30.247 回答