2017-12-01 1 views
0

나는 많은 디렉토리를 가지고 있으며 각각 들어오는 파일 흐름이있다. 정의 된 각 디렉토리의 모든 파일을 정의 된 ftp url로 업로드하는 스크립트가 필요합니다. 최선의 방법은, bash cycle을 통해 수면을 끝내고, 정의 된 모든 것을 끝내고, 60 초 동안 sleep하고, 다시 loop를 시작하는 것입니다.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

을 들여하세요? 예를 들어, FTP1 = ftp : // smart : 스마트 @ 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

두 가지 작은 문제를 제외하고는 감사합니다. 1 : ftp 경로가 항상 in_dir에 따라 마지막 디렉토리 만 변경하는 것은 아닙니다. 때로는 FTP 업로드 URL의 경로가 현저하게 다릅니다. 그리고 두 번째 : 스크립트가 연속적이고 끝없이 만들 수 있다면 좋음 - 첫 번째 실행이 끝난 후 "sleep 60"이 발생하고 끝없이 다시 시작됩니다. 그게 가능 했어? 추신 대단히 감사합니다! – Draco