Você está tão perto, apenas alterando sua instrução if
com um loop while
, ou apenas adicionando um loop while, como você sugere, deve fazer o truque para você.
#!/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' ;
# check every 5 seconds if the files are all there
while [ "$file_count" -ne 3 ]; do
sleep 5
file_count='ls -lrt ${src_dir}/*.txt | grep $RUN_DATE | wc -l'
done
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
Isso funcionaria, embora fosse interrompido caso houvesse mais de três arquivos nesse diretório, ou se um ou mais arquivos nunca aparecessem. Então, eu recomendo adicionar uma pausa ao loop while:
# check every 5 seconds if the files are all there, up to 10 times
count=0
while [ "$file_count" -ne 3 ]; do
sleep 5
file_count='ls -lrt ${src_dir}/*.txt | grep $RUN_DATE | wc -l'
found_files=$(ls -lrt ${src_dir}/*.txt | grep $RUN_DATE)
echo -e "files found:\n\t$found_files" # print the files that have been found so you know which are missing
((count++))
if [ "$count" = 10 ]; then
break
fi
done