文件管理问题



im正在编写一个简单的脚本来重命名&将文件移到新目录中。我似乎无法正常工作,基本上,如果文件夹已经创建,它只会在重命名文件的情况下将文件移动到文件夹中,如果文件夹已创建,但需要重命名文件,它将无法工作,它只是重命名文件,并给我一个错误,因为它无法移动文件。如果需要创建文件夹和重命名文件,它将创建文件夹并重命名文件,但无法移动它们。所以我真的有点迷路了。。

https://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 argumentn";
}
if (defined $movie and defined $season and defined $cont) {
    print "nnProcessing $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 "nn$ind files processed successfully !";
    }
}

问题是重命名文件,然后移动它们,但重命名后,文件在@files阵列中不再以旧名称存在

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

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

这大大简化了您的程序。如果新目录不存在,您只需要创建它,然后为@files 中的每个名称调用mv $f, "$npath/$flast"

相关内容

  • 没有找到相关文章

最新更新