2014-02-23 174 views
0

我使用一个函数来分析一个文件,该文件有一个需要下载的文件名列表。我使用curl下载它们,但有没有更好的方法?显示的输出没问题,但输出不显示吗?如果文件未找到,是否有办法处理异常,并在发生某些事情时继续下一个要下载的文件?可能想忽略我为了获取正确的链接名而做的事情,这很痛苦。目录模式具有文件名称的模式。bash下载文件ftp url

#!/bin/bash 
# reads from the file and assigns to $MYARRAY and download to Downloads/* 

FILENAME=$1 
DLPATH=$2 
VARIABLEDNA="DNA" 
index=0 

function Download { 

VARL=$1 
#VARL=$i 
echo $VARL 
VAR=${VARL,,} 
echo $VAR 
VAR2=${VAR:1:2} 
echo $VAR2 
HOST=ftp://ftp.wwpdb.org/pub/pdb/data/structures/divided/pdb/ 
HOSTCAT=$HOST$VAR2 

FILECATB='/pdb' 
FILECATE='.ent.gz' 
NOSLASH='pdb' 
DLADDR=$HOSTCAT$FILECATB$VAR$FILECATE 
FILECATNAME=$NOSLASH$VAR$FILECATE 
echo $DLADDR 

curl -o Downloads/$FILECATNAME $DLADDR 

gunzip Downloads/$FILECATNAME 


} 

mkdir -p Downloads 



while read line ; do 
     MYARRAY[$index]="$line" 
     index=$(($index+1)) 
done < $FILENAME 

echo "MYARRAY is: ${MYARRAY[*]}" 
echo "Total pdbs in the file: ${index}" 

for i in "${MYARRAY[@]}" 
do 
    Download $i 
done 

我想要写日志文件,我下载前做了一个文件夹,但它似乎并没有在文件夹中要使它。它写入正在执行的文件的根目录,并且它也没有正确写入。我的语法可能是错误的?

curl -o Downloads/$FILECATNAME $DLADDR >> Downloads\LOGS\$LOGFILE 2>&1 
+0

我想写日志文件到我下载之前做的文件夹,但它似乎并没有在文件夹中。它写入正在执行的文件的根目录,并且它也没有正确写入。我的语法可能是错误的? curl -o下载/ $ FILECATNAME $ DLADDR >>下载\ LOGS \ $ LOGFILE 2>&1 – MAXGEN

回答

0

欧凯,首先,我不知道如果我得到这一切的权利,但我会试试看:

  • 我使用curl下载它们,但有更好的方法吗?

我不知道更好的一个。你可以使用wget而不是卷曲,但是卷曲更强大。

  • 输出显示哪个没问题,但有没有办法输出不显示?

您可以使用nohup(例如nohup curl -o Downloads/$ FILECATNAME $ DLADDR)。如果不将输出重定向到特定文件,它将被存储在nohup.out中。通过在命令末尾添加&符号(&),您还可以让它在后台运行,因此即使您断开与服务器的连接,命令仍然会执行。

  • 如果没有找到文件,是否有办法处理异常,如果发生什么事,就转到下一个要下载的文件?

Yout可以使用像测试...存在的东西。但我不知道如何使用这个卷曲。另一方面,你可以检查你的nohup.out错误或其他任何与grep。

我希望这以任何方式帮助你。

干杯

+0

感谢您的回应。我结束了重定向它,“curl -o Downloads/$ FILECATNAME $ DLADDR >> $ LOGFILE 2>&1”您怎么看? – MAXGEN

+0

只要一切按预期工作,你的命令就可以完成这项工作。 用nohup你可以忽略HUP(挂断)信号。所以它在后台运行,不再依赖于用户,这在某些情况下可能有用。因此,如果你使用nohup,它甚至可以工作,例如服务器和你的机器之间的SSH连接不是永久活动的。 – Yanik

+0

我试图将日志文件写入到我下载之前创建的文件夹中,但它似乎并未将其放入该文件夹中。它写入正在执行的文件的根目录,并且它也没有正确写入。我的语法可能是错误的? curl -o下载/ $ FILECATNAME $ DLADDR >>下载\ LOGS \ $ LOGFILE 2>&1 – MAXGEN