如何使用 wget 和 ftp 从我的列表中下载文件
How to download files from my list with wget and ftp
我只需要使用 wget 和 ftp 下载定义的文件。
例如:
1.I 使用以下方法检索所有文件:
echo ls -R | ftp ftp://user:password@host > ./list.txt
2.Then 我将解析结果并获得每个文件的绝对路径列表:
/path/to-the/file-1
/path/to-the/file-2
etc.
3.And 现在我需要使用 wget 和 ftp.
从结果列表中下载所有文件
而且我不想为每个文件下载过程创建一个单独的 FTP 会话。
请多多指教。谢谢。
更新:
对于递归下载,我正在使用它:wget -r ftp://user:password@host:/ -nH -P /download/path
。它工作得很好,但我需要传递一个包含远程文件列表的文件,以便通过一个 FTP 会话通过 FTP 下载。
抱歉,我评论的时候漏掉了"single session"部分。我认为您需要让脚本生成第二个脚本以 运行 单个 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
我只需要使用 wget 和 ftp 下载定义的文件。 例如:
1.I 使用以下方法检索所有文件:
echo ls -R | ftp ftp://user:password@host > ./list.txt
2.Then 我将解析结果并获得每个文件的绝对路径列表:
/path/to-the/file-1
/path/to-the/file-2
etc.
3.And 现在我需要使用 wget 和 ftp.
从结果列表中下载所有文件而且我不想为每个文件下载过程创建一个单独的 FTP 会话。
请多多指教。谢谢。
更新:
对于递归下载,我正在使用它:wget -r ftp://user:password@host:/ -nH -P /download/path
。它工作得很好,但我需要传递一个包含远程文件列表的文件,以便通过一个 FTP 会话通过 FTP 下载。
抱歉,我评论的时候漏掉了"single session"部分。我认为您需要让脚本生成第二个脚本以 运行 单个 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