【问题标题】:bash downloading files ftp urlbash 下载文件 ftp url
【发布时间】:2014-02-23 22:54:33
【问题描述】:

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

#!/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

【问题讨论】:

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

标签: bash curl ftp


【解决方案1】:

好吧,首先,我不确定我是否成功,但我会试一试:

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

我不知道更好的。您可以使用 wget 代替 curl,但 curl 更强大。

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

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

  • 有没有办法在文件未找到时处理异常并在发生问题时转到下一个要下载的文件?

您可以使用 test...exists 之类的内容。或者您可以使用 grep 检查您的 nohup.out 是否有错误或其他任何内容。

我希望这对您有所帮助。

干杯

【讨论】:

  • 感谢您的回复。我最终用这个重定向它,“curl -o Downloads/$FILECATNAME $DLADDR >> $LOGFILE 2>&1”你怎么看?
  • 只要一切按预期工作,您的命令就可以完成工作。使用 nohup 您只需忽略 HUP(挂断)信号。所以它在后台运行,不再依赖于用户,这在某些情况下很有用。所以如果你使用 nohup 它仍然可以工作,例如服务器和你的机器之间的 SSH 连接不是永久激活的。
  • 我正在尝试将日志文件写入我在下载之前创建的文件夹,但它似乎没有在文件夹中。它写入正在执行的文件的根目录,也没有正确写入。我的语法可能是错误的?? curl -o 下载/$FILECATNAME $DLADDR >> 下载\LOGS\$LOGFILE 2>&1
  • Okey 首先 yu 将 stdout ">>" 重定向到 Downloads\LOGS\$LOGFILE 然后将 stderr 重定向到一个未指定的文件,然后附加 &1 将 sderr 重定向到 stdout 1。我会尝试的事情:离开2>&1 看看会发生什么,除了你想要 sterr 在你的文件 2. 我会尝试的事情: - 给出日志文件的完整路径(不带变量) - 用匹配的变量替换路径的部分,看看在哪里问题是
猜你喜欢
  • 2016-01-15
  • 2016-05-27
  • 1970-01-01
  • 1970-01-01
  • 2014-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-23
相关资源
最近更新 更多