我只需要使用 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 session 。
请多多指教。谢谢。
更新:
对于递归下载,我正在使用它:wget -r ftp://user:password@host:/-nH -P/download/path
。它工作得很好,但我需要传递一个包含远程文件列表的文件,以便通过一个 FTP session 通过 FTP 下载。
最佳答案
抱歉,我在评论时错过了“单一 session ”部分。我认为您需要让脚本生成第二个脚本来运行单个 FTP session 。
因此,您的脚本本身不会执行任何 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
关于linux - 如何使用 wget 和 ftp 从我的列表中下载文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39924961/