如何使用wget和ftp

时间:2016-10-07 20:03:52

标签: linux bash shell ftp wget

我只需要下载wget和ftp定义的文件。 例如:

1.我使用以下方法检索所有文件:

echo ls -R | ftp ftp://user:password@host > ./list.txt

2.然后我将解析结果并获得每个文件的绝对路径列表:

/path/to-the/file-1
/path/to-the/file-2
etc.

3.现在我需要使用wget和ftp从结果列表中下载所有文件。

我不想为每个文件下载过程创建单独的FTP会话。

请提出建议。谢谢。

更新

对于递归下载我正在使用它:wget -r ftp://user:password@host:/ -nH -P /download/path。它工作得很好,但是我需要传递一个带有远程文件列表的文件,以便通过FTP下载一个FTP会话。

1 个答案:

答案 0 :(得分:1)

对不起,我评论时错过了“单一会话”部分。我认为您需要让脚本生成第二个脚本来运行单个FTP会话。

因此,您的脚本本身不会执行任何FTP,它只会编写另一个执行传输的脚本。因此,它将编写一个执行此操作的脚本

ftp -n <SOMEADDRESS> <<EOS
quote USER <USERNAME>
quote PASS <PASSWORD>
bin
get file1 localname1
get file2 localname2
...
get fileN localnameN
quit    
EOS

然后它将执行该脚本:

bash < thatScript

所以你的脚本将如下所示:

#!/bin/bash
ScriptName=funkyFTPer
cat - <<END > $ScriptName
ftp -n 192.168.0.1 <<EOS
quote USER freddy
quote PASS frog
END

# Your selection code goes here ***PHNQZ***
echo get file1 localname1 >> $ScriptName
echo get file2 localname2 >> $ScriptName
echo get fileN localnameN >> $ScriptName

echo quit >> $ScriptName
echo EOS  >> $ScriptName
echo "Now run bash < $ScriptName"

然后删除包含密码的脚本。或者您可以将密码放在.netrc文件中。

关于在本地创建目录,您可以使用mkdir -p在第一个脚本中执行此操作。 -p的优势在于它可以一次性创建所有目录,如果它们已经存在则不会感到沮丧。

因此,只需查看上面显示***PHNQZ***的代码区域,假设您的代码决定您需要文件freddy/frog/c.txt,您可以这样做:

remotename="freddy/frog/c.txt"  
localdir=${remotename%/*}         # Get just directory part using "bash Parameter Substitution"
mkdir -p "$localdir"              # make directory and all parts in between