Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell 使用wget下载文件。如果wget下载文件,请移动它们,否则使用wget下载不同的文件_Shell_If Statement_Wget - Fatal编程技术网

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

Shell 使用wget下载文件。如果wget下载文件,请移动它们,否则使用wget下载不同的文件,shell,if-statement,wget,Shell,If Statement,Wget,我正在尝试运行一个shell脚本,其中包括if语句和一组初始条件。如果wget下载文件,我希望脚本检查文件夹中是否存在扩展名为“grib2”的文件。如果文件确实存在,则会将其移动到另一个目录。如果在运行wget之后,文件没有下载或不存在于目录中,那么我希望wget从其他源下载。该脚本用于过滤 我遇到的问题是第二个wget脚本从未运行,即使文件夹中没有具有该扩展名的文件 #!/bin/sh # # variables # basedir="ftp://ftp.ncep.noaa.gov/pub

我正在尝试运行一个shell脚本,其中包括if语句和一组初始条件。如果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
注释

  • 您的代码是高度重复的,并且将受益于函数
  • 分配给
    $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
#/bin/bash
basedir=”ftp://ftp.ncep.noaa.gov/pub/data/nccf/com"
basename1=“hur/prod/hur。”
下载\u dir=/awips2/edex/data/gfdl
文件\u dir=/awips2/edex/data/manual

阅读日期小时谢谢你的重写。虽然wget对“if”和“else”都有相同的url,但它识别的模式是不同的。“GetFiles12”和“18”对应什么?还有,“$1”在代码中对应什么?我创建了一个“getfiles”函数,它传递一个参数(即
$1
)。在您的代码中,您将$datetime设置为12或18(我假设这是小时)——这是传递给函数的参数。我没有看到不同的模式,我将编辑我的代码。非常感谢,Glenn.:-)