2017-12-01 12 views
0

私は多くのディレクトリを持ち、それぞれにはいくつかの着信ファイルの流れがあります。 定義された各ディレクトリからすべてのファイルをアップロードしたスクリプトが、定義されたftp URLに必要です。 これは、終わりのサイクルでスリープ状態のbashサイクルを介してすべての定義が完了し、60秒間スリープして再びループを開始できる場合に最適です。ftpアップロードスクリプト - 多くのディレクトリから、それぞれ自分のftpパスに?

今私はそのような何かを持っているが、それは醜いだった、非常に長いスクリプト:いくつかの大まかなクリーンアップと簡素化

####ana 

echo "Starting script:ana $(date +%Y.%m.%d\ %H:%M:%S)..." 

getfmts() { if [ -f "$1" ] || [ -d "$1" ]; then echo $(stat -c %Y $1); else echo 0; fi; } 

DIRIN_ana=/DWD_sorted/ana # Full path to input directory 
DIROUT_ana=/DWD_sorted/ana_sent # Full path to output directory 

cd $DIRIN_ana 

if [ "$(ls -A .|grep bufr)" ]; then echo "Processing files..."; else echo "No files"; exit; fi 

for f in *; do 
ts=$(date +%s); tsf=$(getfmts $f) 
if [ $((ts-tsf)) -gt 10 ]; then 
echo "Sending file $f to ftp..." 
curl -T $f ftp://smart:[email protected]/../../smart/edit/dwd/ana 
if [ $? -eq 0 ]; then 
mv -f $f $DIROUT_ana/ 
else 
echo "There was an error when trying to upload file!" 
fi 
fi 
done 

echo "Script finished: $(date +%Y.%m.%d\ %H:%M:%S)" 




####hsy 

echo "Starting script:hsy $(date +%Y.%m.%d\ %H:%M:%S)..." 

getfmts() { if [ -f "$1" ] || [ -d "$1" ]; then echo $(stat -c %Y $1); else echo 0; fi; } 

DIRIN_hsy=/DWD_sorted/hsy # Full path to input directory 
DIROUT_hsy=/DWD_sorted/hsy_sent # Full path to output directory 

cd $DIRIN_hsy 

if [ "$(ls -A .|grep bufr)" ]; then echo "Processing files..."; else echo "No files"; exit; fi 

for f in *; do 
ts=$(date +%s); tsf=$(getfmts $f) 
if [ $((ts-tsf)) -gt 10 ]; then 
echo "Sending file $f to ftp..." 
curl -T $f ftp://smart:[email protected]/../../smart/editor/dwd/gme/hsy 
if [ $? -eq 0 ]; then 
mv -f $f $DIROUT_hsy/ 
else 
echo "There was an error when trying to upload file!" 
fi 
fi 
done 

echo "Script finished: $(date +%Y.%m.%d\ %H:%M:%S)" 
+1

をスクリプトをインデントしてください:) – perreal

+0

は今okですか?私は、例えば、FTP1 = ftp://スマート:スマート@ SM /../../スマート/エディタ/ dwd/gme/hsy、DIRIN1 =/DWD_sorted/hsyなどのリンク変数を定義することができますしかし、どのように部分ごとにそれを取る循環スクリプトを構築し、最後に行くと、最初に戻り、再び開始するのですか? – Draco

答えて

0

echo "Starting script:ana $(date +%Y.%m.%d\ %H:%M:%S)..." 

getfmts() { 
    if [ -f "$1" ] || [ -d "$1" ]; then 
    echo $(stat -c %Y $1) 
    else 
    echo 0 
    fi 
} 

for dir in ana hsy; do 

    echo "Processing $dir" 
    dir_in="/DWD_sorted/$dir" 
    dir_out="${dir_in}_sent" 

    cd $dir_in 

    if [ "$(ls -A .|grep bufr)" ]; then 
     echo "Processing files..." 
    else 
     echo "No files" 
     continue 
    fi 

    for f in *; do 
     ts=$(date +%s); tsf=$(getfmts $f) 
     if [ $((ts-tsf)) -gt 10 ]; then 
      echo "Sending file $f to ftp..." 
      curl -T $f ftp://smart:[email protected]/../../smart/edit/dwd/$dir 
      if [ $? -eq 0 ]; then 
       mv -f $f $dir_out/ 
      else 
       echo "There was an error when trying to upload file!" 
      fi 
     fi 
    done 

    echo "Script finished: $(date +%Y.%m.%d\ %H:%M:%S)" 

done 
+0

ありがとう、2つの小さな問題を除いて、良い見えます:1:ftpのパスは常にin_dirによる最終ディレクトリだけを変更するわけではありません。 ftpアップロードURL上のパスが著しく異なる場合があります。 2つ目は、スクリプトが連続して無限になることができれば良いことです。最初の実行が完了した後、「スリープ60」があり、無限に再び開始されます。それは可能でしたか? P.S.どうもありがとうございました! – Draco

関連する問題