linux - 如何使用 wget 和 ftp 从我的列表中下载文件

标签 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 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/

相关文章:

bash - 为什么 getopts 只在第一次起作用?

bash - FFmpeg 脚本不循环

linux - 删除两个目录之间所有相同的文件

linux - 如何设置用户的权限,以便它可以执行 bash 脚本来读取其他用户的文件?

linux - 使用源代码和 linuxdeployqt 创建 appimage

linux - 关于反引号和%string含义的问题

mysql - 在 Shell 脚本中调用 MySQL 存储过程

Git cherry 选择那些包含关键字(跟踪 id)的提交

linux - .dircolors 不影响现有文件,只影响新文件

regex - 如何在 bash 中使用变量进行 grep