как использовать файл ссылки в качестве исходного каталога в моей текущей настройке

#perl

#perl

Вопрос:

Это текущий код, который вручную вводит исходный каталог и каталог назначения. https://github.com/klgabs/perl/blob/main/zip_and_move.pl

Моя цель — использовать ссылочный файл в качестве исходного каталога и манипулировать целевым каталогом, который почти такой же, как исходный каталог, за вычетом ПРОМЕЖУТОЧНОГО местоположения

файлы ссылок будут выглядеть следующим образом в текстовом файле.

 /archives/data/mefab/STAGING/PRODUCTION
/archives/data/bkfb/STAGING/PRODUCTION
/archives/data/sast/STAGING/PRODUCTION
/archives/data/cast/STAGING/PRODUCTION
/archives/data/advan/STAGING/PRODUCTION
  

Ответ №1:

Я думаю, вы спрашиваете, как перейти от

 my $stage = "/archives/data/mefab/STAGING/PRODUCTION";
  

Для

 my $prod = "/archives/data/mefab/PRODUCTION";
  

Опции:

  1.  my $prod = "$stage/../../PRODUCTION";
      
  2.  use Cwd qw( abs_path );
    
    my $prod = abs_path("$stage/../../PRODUCTION");
      
  3.  use Path::Tiny qw( path );
    
    my $prod = path($stage)->parent(2)->child("PRODUCTION");
      

Если вы не хотите жестко кодировать PRODUCTION ,

  1.  use File::Basename qw( basename );
    
    my $prod = "$stage/../../" . basename($stage);
      
  2.  use Cwd            qw( abs_path );
    use File::Basename qw( basename );
    
    my $prod = abs_path("$stage/../../" . basename($stage));
      
  3.  use Path::Tiny qw( path );
    
    $stage = path($stage);
    my $prod = $stage->parent(2)->child($stage->basename());
      

В качестве альтернативы вы могли бы начать с

 my $base = "/archives/data/mefab";
  

Тогда все, что вам нужно, это

 my $stage = "$base/STAGING/PRODUCTION";
my $prod  = "$base/PRODUCTION";