0

データをテキスト ファイルに抽出していますが、最初にスクリプトでファイルが存在するかどうかを確認してから、特定のフォルダーにコピーを作成します。同じフォルダーにまだ存在する場合は、保存しますが、最後のファイルの値に応じて、値 _1 または _2 のように追加します。

これが現在の私のスクリプトです。

if (-e "/tmp/POP_Airtime_Week1.txt"){

    copy("/tmp/POP_Airtime_Week1.txt","/tmp/POP") || die "cannot copy file";
    # If the file exists create a copy in /tmp/POP

    #################################
    # IF FILE EXISTS IN /tmp/POP copy the file but rename it to 
    # POP_Airtime_Week1_1.txt then increase the numbers each time
    # the script is run and a new copy needs to be created.
    ##################################

    unlink ("/tmp/POP_Airtime_Week1.txt");

}

存在する場合/tmp/POP/POP_Airtime_Week1.txtは、コピーして名前を付けて保存し/tmp/POP/POP_Airtime_Week1_1.txtます。次回スクリプトを実行して/tmp/POP/POP_Airtime_Week1.txt存在するときに、それをコピーして保存し/tmp/POP/POP_Airtime_Week1_2.txt ます...

これどうやってするの?

4

2 に答える 2

2

ターゲット ファイルが存在する間、変数をインクリメントできます。

my $name = "POP_Airtime_Week1";
if (-e "/tmp/POP/$name.txt") {
    my $num = 1;
    $num ++ while (-e "/tmp/POP/$name\_$num.txt");
    copy("/tmp/$name.txt","/tmp/POP/$name\_$num.txt") or die "cannot copy file";
} else {
    copy("/tmp/$name.txt","/tmp/POP/$name.txt") or die "cannot copy file";
}

ただし、注意してください。あなた (またはあなたと他の誰か) がスクリプトの複数のインスタンスを実行すると、競合状態が発生する可能性があります。

于 2012-11-01T10:23:55.623 に答える
0
 my $i = 0;
 my $fname = $file;
 for (;;) {
     last unless -f $fname;
     $i++;
     $fname = "${file}_$i";
 }
 # $fname is new unused file name, copy to it
于 2012-11-01T10:26:28.907 に答える