【发布时间】:2018-05-15 09:26:11
【问题描述】:
我有很多目录,每个目录都有一些传入的文件流。 需要脚本,将每个已定义目录中的所有文件上传到已定义的 ftp url。 最好的,如果这可以通过 bash 循环和 sleep in end 来完成 - 循环通过所有定义,睡眠 60 秒,然后重新开始 - 循环。
现在我有了类似的东西,但那是丑陋的,很长的脚本:
####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:smart@SM/../../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:smart@SM/../../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)"
【问题讨论】:
-
请缩进脚本:)
-
现在可以了吗?我想,我可以定义一个链接变量,例如,FTP1=smart:smart@SM/../../smart/editor/dwd/gme/hsy,DIRIN1=/DWD_sorted/hsy 等等,但是如何构建一个循环脚本,谁把它全部按部分,以及何时结束,回到起点,重新开始?