Shell 使用wget下载文件。如果wget下载文件,请移动它们,否则使用wget下载不同的文件
我正在尝试运行一个shell脚本,其中包括if语句和一组初始条件。如果wget下载文件,我希望脚本检查文件夹中是否存在扩展名为“grib2”的文件。如果文件确实存在,则会将其移动到另一个目录。如果在运行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
#!/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.:-)