文件管理问题

时间:2015-06-24 21:48:03

标签: perl file

我正在编写一个简单的脚本来重命名&将文件移动到新目录中。我似乎无法使其正常工作,基本上如果文件夹已经创建,只有重命名文件时才会将文件移入其中,如果文件夹已经创建但文件需要重命名则无法正常工作将只重命名文件并给我一个错误,因为它将无法移动文件。如果需要创建文件夹并重命名文件,则会创建文件夹并重命名文件,但无法移动它们。所以我真的有点失落..

http://i.stack.imgur.com/v8smp.jpg

我一直在尝试很多不同的方式,但它最终没有工作或给我相同的结果我认为我做错了什么,继承我的代码:

use strict;
use warnings;
use File::Copy qw(mv);

my ($movie, $season, $cont) = @ARGV;

if (not defined $movie) {
    die "need a name as first argument\n";
}

if (defined $movie and defined $season and defined $cont) {

    print "\n\nProcessing $movie season $season with container .$cont :\n";

    my $npath = "Saison "."$season";
    my $exist = 0;
    my $num = 1;
    my $ind = 0;
    my $flast = undef;
    my $rpath = undef;
    my @files = glob("*.$cont");
    my @all = glob('*');

    foreach my $f (@files) {
        if ($f =~ m/e([0-1_-] ?)\Q$num/i or $f =~ m/episode([0-1_-] ?)\Q$num/i) {
            $flast = "$movie.S$season"."E$num.$cont";
            rename($f, $flast) or die "\nError while renaming $f !";
            $num++;
        }
    }

    if (-d "$npath") {
        $exist = 1;
        print "\n$npath";
        }
    else {
        mkdir($npath) or die "\nError while making new directory";
        $exist = 1;
    }

    sleep(1);

    if ($exist == 1) {
        foreach my $f (@files) {
            $npath = "Saison "."$season/$f";
            mv($f, $npath) or die "\nError while moving $f";
            print "\n$f done !";
            $ind++;
        }
        print "\n\n$ind files processed successfully !";
    }
}

1 个答案:

答案 0 :(得分:1)

问题是您正在重命名文件然后移动它们,但在重命名文件后,@files数组中的旧名称不再存在

您可以使用mv更改文件名以及将其放入新目录。换句话说,你可以打电话

mv 'movie.title.s01.e08.(2008).[1080p].mkv', 'Saison 01/Movie TitleS01E08.mkv'

大大简化了您的程序。您只需创建新目录(如果该目录不存在),然后为mv $f, "$npath/$flast"

中的每个名称调用@files