编写脚本以重命名正在处理的作业文件

时间:2019-04-17 18:41:24

标签: bash perl

我有一个打印程序,可以将打印作业转换为afp并发送给第三方。问题是他们寻找的文件名与打印程序创建的文件名完全不同。我在工作流程中有一部分可以在处理文件名后运行外部程序来创建文件名,然后将其保存到文件服务器上的目录中,或者将其通过FTP传输到另一台服务器上。我的问题是编写脚本进行实际更改。

创建的文件名是(job#)。print.afp

我们要查找的文件名格式为ACIF_OUTPUT_(日期)(时间戳)(作业#)。afp

我开始创建一个bash来执行此操作,但是缺少获取文件名以从中提取作业#并将其插入到适当位置的部分。

#! /bin/bash
date_time=$(date +“%Y-%m-%d at %H,%M.%S)
Job=$(
file=”/usr/Transfers/ACIF_OUTPUT_${date_time}_{Job}.afp”
echo “Starting backup to $file…”

它可以是perl或其他语言,只要我可以链接到它即可运行。

这很重要,适用于理光流程总监。它将由StepTemplate RunExternalProgram触发。

仍在努力找出模板。

如果有帮助,我找到了执行复制的perl。如果可以在这里完成,那将是完美的。

my $old_file = shift;
my $new_file = shift;
use File::Copy qw(copy);
use File::Basename;

my $directory = dirname( $new_file );

if ($directory eq "/" ) {
     print "Cannot copy file to " .  $new_file .
+" as it does not exist.\n"  ;
    exit (1);
  }

if (-d $directory ) {
    copy( $old_file,$new_file) or die "Copy failed: Directory or file does not exist: $new_file";
    exit ($? >> 8);
  }
  else {
     print "Cannot copy file to " .  $new_file .
+" as it does not exist.\n"  ;
    exit (1);
  }

这是运行它的命令

copy_files.pl $ {getAbsoluteFileName(print,afp,read)}

1 个答案:

答案 0 :(得分:1)

@ARGV中提供了传递给Perl脚本的参数。

use File::Basename qw( basename dirname );
use POSIX          qw( strftime );

my ($old_qfn) = @ARGV;
my $dir_qfn = dirname($old_qfn);
my $old_fn = basename($old_fqn);
my ($job_num) = $old_fn =~ /^(\d+)\.print\.afp\z/
   or die("Invalid input \"$old_qfn\": Doesn't match expected format\n");

my $new_fn = sprintf('ACIF_OUTPUT_%s_%s.afp',
   strftime("%Y-%m-%dT%H:%M:%SZ", gmtime(time)),
   $job_num,
);
my $new_qfn = $dir_qfn . '/' . $new_fn;
rename($old_qfn, $new_qfn)
   or die("Can't rename \"$old_qfn\" to \"$new_qfn\": $!\n");