Perl - перемещение файлов из DIR1 в DIR2

Я пытаюсь переместить файлы из DIR1 в DIR2, используя скрипт Perl. Мой код компилируется, но, к сожалению, работает неправильно. Заранее спасибо за предложения

#!/usr/bin/perl -w
use File::Copy;
use Cwd 'abs_path';

if ( @ARGV != 2 ) {
    die "Script takes two parameters: dir1 dir2";
}

if ( -d $ARGV[0] && -d $ARGV[1]  )
{
    opendir my $DIR, $ARGV[0] or die "Read error: $!";

    while(my $file = readdir $DIR ) 
    {
        next if ($file eq "." or $file eq "..");

            my $filepath = abs_path($file);
            print "$filepath\n";

            move $filepath, $ARGV[1];
    }
    closedir $DIR;
}
else
{
    print "Both arguments must be directories!\n";
}

Сценарий печатает все файлы в DIR1, но не удается выполнить перемещение.


person Macieyo    schedule 18.05.2016    source источник
comment
Этот вопрос одновременно слишком специфичен (т.е., вероятно, никогда не поможет никому другому) и недостаточно изучен (некоторый простой сеанс отладки печати или отладчика выявил бы ошибку). Пожалуйста, оставьте себе немного больше времени, чтобы изучить и сформулировать свой вопрос, прежде чем публиковать его в будущем. Благодарю вас!   -  person Patrick Böker    schedule 18.05.2016
comment
abs_path делает не то, что вы думаете. Он просто смотрит на аргумент, который вы ему дали, и возвращает, каким был бы абсолютный путь, если бы этот аргумент представлял относительный путь. Он не выполняет поиск в вашей файловой системе, чтобы выяснить, где находится этот файл, и возвращает фактический абсолютный путь к этому файлу. Вам необходимо самостоятельно указать каталог, который содержится в $ARGV[0].   -  person Paul L    schedule 18.05.2016


Ответы (1)


readdir возвращает только имена файлов в заданном каталоге. Таким образом, чтобы получить абсолютный путь к файлу, вам нужно добавить $ARGV[0]. Подробную информацию см. в perldoc для readdir.

person Patrick Böker    schedule 18.05.2016
comment
Или не делайте этого, а просто используйте вместо этого glob. - person Sobrique; 18.05.2016