Как мне переместить файл из текущего каталога в Perl? - PullRequest
0 голосов
/ 14 октября 2019

Привет всем, кто может помочь. У меня есть проблема, которую я, кажется, не понимаю. Я выбираю файлы и объединяю их с помощью команды "cdo" после объединения, я хочу переместить объединенные файлы в другой каталог. Это работало отлично месяц назад, затем мне пришлось увеличить оперативную память, что заняло месяц, чтобы не выполнить работу над сценарием. Вот начало моего сценария

use strict;
use warnings;
use File::Path;
use File::Find;
use File::Copy qw(copy);
use File::Copy qw(move);
use Path::Tiny;
use Tie::File;
use File::Cat;

Прежде чем я подойду к проблеме, следующая команда перемещения работает после выбора файла

              print "Copying $file\n" if $debug;
              my $cmd01 = "cp $Input_Data_Dirs[$ll]/$file  $Output_Base_Dirs[$mm]";
              print "Doing system ($cmd01)\n" if $debug;
              system ($cmd01);

Так что я могу переместить несколько файлов с помощьювыше конструкции, затем я перехожу в каталог. Оттуда я объединяю шесть файлов в один

      print "doing cat with cdo\n" if $debug;
      my $cmd05 = "cdo cat @sixfiles $newfile";
      print "Doing system ($cmd05)\n" if $debug;
      system ($cmd05);

Вот часть, которая выходит из строя

#-----------------------------------------
      #print "Moving combined file\n" if $debug;
      #my $cmd21 = "cp $newfile  $Output_Base_Dirs[$mm]/$Var_Dirs[$kk]";
      #print "Doing system ($cmd21)\n" if $debug;
      #system ($cmd21);
      #copy $newfile, $Output_Base_Dirs[$mm]/$Var_Dirs[$kk];
      move $newfile, $Output_Base_Dirs[$mm]/$Var_Dirs[$kk];
      #----------------------------------------------------

Команды unix "cp" и "mv" выдают ошибку

cp: missing destination file operand after 'pr_AFR-44_CNRM-CERFACS-CNRM-CM5_historical_r1i1p1_CLMcom-CCLM4-8-17_v1_day_19710101_20001231.nc'
Try 'cp --help' for more information.
sh: 2: /home/suman/CORDEX/DATA/historical/precip: Permission denied

и

mv: missing destination file operand after 'pr_AFR-44_CNRM-CERFACS-CNRM-CM5_historical_r1i1p1_CLMcom-CCLM4-8-17_v1_day_19710101_20001231.nc'
Try 'mv --help' for more information.
sh: 2: /home/suman/CORDEX/DATA/historical/precip: Permission denied

Я удостоверился, что нет проблем с правами доступа, введя команду

sudo chmod -Rv ugo +rwx CORDEX

С другой стороны, встроенные в Perl команды "копировать" и«Переместить» дают следующие ошибки

    Argument "precip" isn't numeric in division (/) at merge_files.pl line 247.
Argument "/home/suman/CORDEX/DATA/historical" isn't numeric in division (/) at merge_files.pl line 247.
Illegal division by zero at merge_files.pl line 247.

Я действительно побежден этими ошибками. Я буду признателен за любую помощь, если возможно, чтобы решить эту проблему.

Я проголосовал за решение от Dave Cross по той причине, что оно устраняет ошибку нецифровости / деления на ноль. Спасибо Дэйв за это. Однако после определения

my $target_dir="$Output_Base_Dirs[$mm]/$Var_Dirs[$kk]";

обе команды:

my $cmd21 = "cp -v $newfile --target-directory=$target_dir";

и мой $ cmd21 = "mv -v $ newfile --target-directory = $ target_dir"

выдает ту же ошибку

    cp: missing destination file operand after 'pr_AFR-44_CNRM-CERFACS-CNRM-CM5_historical_r1i1p1_CLMcom-CCLM4-8-17_v1_day_19710101_20001231.nc'
Try 'cp --help' for more information.
sh: 2: --target-directory=/home/suman/CORDEX/DATA/historical/precip: not found

, но target_dir существует. Две команды Perl

      copy $newfile, "$target_dir" or die "copy operation failed: $!";
      move $newfile, "$target_dir" or die "move operation failed: $!";
move operation failed: No such file or directory at merge_files.pl line 249.
copy operation failed: No such file or directory at merge_files.pl line 248.

Я действительно сбит с толку.

1 Ответ

3 голосов
/ 14 октября 2019
move $newfile, $Output_Base_Dirs[$mm]/$Var_Dirs[$kk];

Это неправильно. При объединении двух переменных, подобных этой, вам нужно поместить их в строку.

move $newfile, "$Output_Base_Dirs[$mm]/$Var_Dirs[$kk]";

Без этого Perl думает, что вы пытаетесь сделать сумму деления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...