使用wget下载文件。如果wget下载文件,请移动它们,否则使用wget下载不同的文件

时间:2015-08-27 19:32:12

标签: shell if-statement wget

我正在尝试运行包含if语句和一组初始条件的shell脚本。如果wget下载文件,我希望脚本检查文件夹中是否存在带有“grib2”扩展名的文件。如果文件确实存在,则将它们移动到另一个目录。如果在运行wget之后文件没有下载或存在于目录中,那么我希望wget从不同的源下载。该脚本旨在过滤。

我遇到的问题是第二个wget脚本永远不会运行,即使该文件夹中没有包含该扩展名的文件。

#!/bin/sh

#
# variables
#

basedir="ftp://ftp.ncep.noaa.gov/pub/data/nccf/com"
basename1="hur/prod/hur."

date=`date +"%Y%m%d"`
date1=`date +"%Y%m%d" -d "+1 days"`
date2=`date +"%Y%m%d" -d "-1 days"`
hour=`date +"%H"`
file=`ls -l /awips2/edex/data/gfdl/*.grib2 2>/dev/null`
#
# main
#

if [ $hour -ge "13" ] && [ $hour -le "18" ]
then
datetime="${date}12"
url1="${basedir}/${basename1}${datetime}/"
wget -r -nd --no-parent -e robots=off -R 'index.*' -A '*9*l*.0p16.*.grib2' -P /awips2/edex/data/gfdl/ $url1 
   if [[ "$file" != "0" ]]; then
   mv /awips2/edex/data/gfdl/* /awips2/edex/data/manual/
   else [[ "$file" != "1" ]]; then
   wget -r -nd --no-parent -e robots=off -R 'index.*' -A '*0*l*.0p16.*.grib2' -P /awips2/edex/data/gfdl/ $url1
   mv /awips2/edex/data/gfdl/* /awips2/edex/data/manual/
   fi



elif [ $hour -ge "19" ] && [ $hour -le "23" ]
then
datetime="${date}18"
url1="${basedir}/${basename1}${datetime}/"
wget -r -nd --no-parent -e robots=off -R 'index.*' -A '*9*l*.0p16.*.grib2' -P /awips2/edex/data/gfdl/ $url1 
   if [[ "$file" != "0" ]]; then
   mv /awips2/edex/data/gfdl/* /awips2/edex/data/manual/
   else [[ "$file" != "1" ]]; then
   wget -r -nd --no-parent -e robots=off -R 'index.*' -A   '*0*l*.0p16.*.grib2' -P /awips2/edex/data/gfdl/ $url1
   mv /awips2/edex/data/gfdl/* /awips2/edex/data/manual/
   fi
fi

1 个答案:

答案 0 :(得分:0)

注释

  • 您的代码具有高度重复性,并且将受益于函数
  • 分配给$files的方式不会给您计算。此外,您的价值永远不会得到更新。
  • 您需要elif

重写

#!/bin/bash

basedir="ftp://ftp.ncep.noaa.gov/pub/data/nccf/com"
basename1="hur/prod/hur."
download_dir=/awips2/edex/data/gfdl
files_dir=/awips2/edex/data/manual

read date hour <(date +"%Y%m%d %_H")
date1=$(date +"%Y%m%d" -d "+1 days")
date2=$(date +"%Y%m%d" -d "-1 days")

count_grib2_files() {
    files=( "$download_dir"/*.grib2 )
    # spit out the number of files
    echo "${#files[@]}"
}

do_wget() {
    wget -r -nd --no-parent -e robots=off -R 'index.*' -A "$2" -P "$download_dir" "$1"
}

getfiles() {
    datetime="${date}$1"
    url="${basedir}/${basename1}${datetime}/"
    do_wget "$url" '*9*l*.0p16.*.grib2'
    if [[ "$(count_grib2_files)" -gt 0 ]]; then
        mv "$download_dir"/* "$files_dir"
    else
        do_wget "$url" '*0*l*.0p16.*.grib2'
        if [[ "$(count_grib2_files)" -gt 0 ]]; then
            mv "$download_dir"/* "$files_dir"
        else
            echo "could not download files!"
        fi
    fi
}

if [[ "$hour" -ge "13" ]] && [[ "$hour" -le "18" ]]
then
    getfiles 12

elif [[ $hour -ge "19" ]] && [[ $hour -le "23" ]]
    getfiles 18
fi