我只需要下载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会话。
答案 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