初心者です。次のことを行うperlスクリプトを作成しました
・「/x01/abcd/abc_logs/abcd_Logs」の下に、現在の日付までのディレクトリを「YYYYMMDD」の形式で、まだ作成していない場合は作成します。つまり、スクリプトが「2013 年 1 月 1 日」に実行されると、ディレクトリ「20130101」が上記のパスの下に作成されます。そのため、ログを検査する必要がある場合は常に、現在の日付までにディレクトリを探します。
-ログ ファイルが同じ日にダウンロードされているかどうかを確認します。ダウンロードされていない場合、ログは TODAY のディレクトリにダウンロードされます。
共有にファイルがないときにメッセージを出力する解決策を考え出すのに苦労しています。これはもちろん、ユーザーが共有に存在しない 2 つ以上のファイルを指定した場合です。「sub get_LOGS」に「die」ステートメントがあるため、これが発生することはわかっています。指定したすべてのファイルがたまたま共有にない場合にメッセージを返す方法を理解できないようです。
このスクリプトの使い方は次のとおりです
./abc_logs ....<ファイル(n)>
以下はスクリプトです。
my $LOGS_LOCAL_PATH = "/x02/abc/abcba2/";
chomp $LOGS_LOCAL_PATH;
my $LOGS_REM_PATH = "/x01/INT/abc/vabc2/";
chomp $LOGS_REM_PATH;
my $TODAY = `date +%Y%m%d`;
chomp $TODAY;
my @GETLOOP = @ARGV;
unless ($#ARGV >= 0) {
print "\nUsage: gtp_logs.pl <file1> <file2> <file3>.....<file(n)>\n\n";
exit;
}
system("clear");
unless ( -d "$LOGS_LOCAL_PATH"."$TODAY") {
print "Directory \"$TODAY\" doesn't exist. So creating the directory..!\n";
print "OK..Done.....!\n\n";
system("mkdir $LOGS_LOCAL_PATH/$TODAY");
}
else {
print "Directory already exists. Logs will be downloaded to ==> \"$LOGS_LOCAL_PATH$TODAY\".....!\n\n";
}
# if_DOWNLOADED($LOGS_LOCAL_PATH,$TODAY,@GETLOOP);
chdir("$LOGS_LOCAL_PATH"."$TODAY") || die "cannot cd to ($!)";
foreach my $GETL (@GETLOOP) {
my $is_downloaded = if_DOWNLOADED($LOGS_LOCAL_PATH,$TODAY,$GETL);
if(!$is_downloaded)
{
get_LOGS("172.25.70.221","abc","abc2","/x01/INT/abc",$GETL);
print "File \"$GETL\" downloaded to ==> \"$LOGS_LOCAL_PATH$TODAY\"\n\n";
}
else
{
print "File \"$GETL\" has already been Downloaded to ==> \"$LOGS_LOCAL_PATH$TODAY\"\n\n";
}
}
sub get_LOGS {
my $LOG_HOST = shift;
my $REM_USER = shift;
my $REM_PASSW = shift;
my $REM_PATH = shift;
my $REM_FILE = shift;
print "Connecting to the sftp share! Please wait....!\n";
my $sftp = Net::SFTP::Foreign->new($LOG_HOST, user => $REM_USER, password => $REM_PASSW);
$sftp->setcwd($REM_PATH) or die "unable to change cwd: " . $sftp->error;
print "OK. On the share! Downloading the file \"$REM_FILE\"...................!\n\n\n\n";
$sftp->error and die "Problem connecting to the share...!!!! " . $sftp->error;
$sftp->get($REM_FILE) or die "File does not seem to be present on the remote share. Please re-request..!!!" . $sftp->error;
return $REM_FILE;
}
sub if_DOWNLOADED {
my $DWD_FILE_PATH = shift;
my $DWD_DIR = shift;
my $DWD_FILE = shift;
if (-e "$DWD_FILE_PATH/$DWD_DIR/$DWD_FILE")
{
return 1;
}
else
{
return 0;
}
}
誰かがこの問題の解決策を見つけるのを手伝ってくれませんか? 同じスクリプトを使用して変更してみてください。
/V