すべてのファイルを待ってからディレクトリにコピーする方法

すべてのファイルを待ってからディレクトリにコピーする方法

名前に日付を含むファイルが毎日表示される3つのファイルがあります。 3つのファイルの日付がすべて今日の日付と一致することを確認する必要があります。そして、すべてのファイルが同時に到着しない可能性があるため、3つのファイルを待つ必要があります。すべてのファイルが到着したら、3つのファイルをすべてターゲットディレクトリにコピーします。

以下のサンプルコードは、すべてのファイル(存在する場合)で機能します。ただし、スクリプトがsrcディレクトリ内の3つのファイルをすべて待機または検索し、すべてのファイルを一緒に移動できるwhileループまたはスリープコマンドを作成する必要があります。

#!/bin/ksh
src_dir=/data/SIN/src;
tgt_dir=/data/SIN/tmp;
cd $src_dir;
RUN_DATE=`date +%Y%m%d`;

file1=file1_${RUN_DATE}.txt
file2=file2_${RUN_DATE}.txt
file3=file3_${RUN_DATE}.txt

file_count=`ls -lrt ${src_dir}/*.txt | grep $RUN_DATE | wc -l` ;

if [ "$file_count" == 3 ]
then
        echo "all 3 files are available";
        cp ${src_dir}/${file1} $tgt_dir;
        cp ${src_dir}/${file2} $tgt_dir;
        cp ${src_dir}/${file3} $tgt_dir;
    echo "files copied";
else
        echo "file missing";
fi

ベストアンサー1

努力する

file_count=$(ls -lrt ${src_dir}/*.txt | grep -c $RUN_DATE)

while [ "$file_count" != 3 ]
do
    echo "file missing";
    sleep 60
    file_count=$(ls -lrt ${src_dir}/*.txt | grep -c $RUN_DATE)
else
        echo "all 3 files are available";
        cp ${src_dir}/${file1} $tgt_dir;
        cp ${src_dir}/${file2} $tgt_dir;
        cp ${src_dir}/${file3} $tgt_dir;
    echo "files copied";
    return

done

気づく

  • 興味深い文字(スペース、新しい行...)がないことがわからない限り、lsの出力を解析するのは悪い考えです。
  • 同じことをするgrep | wc -lそれを交換しましたgrep -c
  • 同じように、私はバックティックを次に変えました。$( )

編集:どのファイルが欠落していますか?

変える

echo "file missing";

渡す

test -f ${src_dir}/${file1} || echo ${file1} missing
test -f ${src_dir}/${file2} || echo ${file2} missing
test -f ${src_dir}/${file3} || echo ${file3} missing

おすすめ記事