从FTP服务器获取文件列表

时间:2013-03-29 15:23:00

标签: bash ftp

我正在尝试获取服务器上所有文件的列表(特别是我们在那里的每个pdf文件)。我尝试使用总指挥官并搜索文件。它在某种程度上起作用,因为我得到了我们在那里的每个pdf的列表,但无法导出结果(我们有100.000+文件)

我尝试使用bash脚本来获取信息,但我对linux不是很熟悉,而且我真的不知道我在做什么。

我的脚本如下所示:

#!/bin/bash
hostname="<host>"
ftp -i -nv $hostname << EOF
user <username> <password>
ls -R 
EOF

运行上面的脚本我得

?Invalid command
501 Illegal PORT command
ftp: bind: Address already in use
221 Goodbye

任何帮助或指出我要搜索什么将不胜感激。

6 个答案:

答案 0 :(得分:31)

使用卷曲,这是方便的curl ftp://yourftpserver/dir/ --user username:password

答案 1 :(得分:5)

ncftpls ftp://yourftpserver/dir/*.pdf

请注意,上述命令中的*.pdf等模式可以按预期工作。

对于递归,请使用-R。有关更多选项,请参阅man ncftpls

ncftplsncftp包提供。对于RHEL,此包可在epel repo。

中找到

答案 2 :(得分:4)

尝试配置ftp以使用PASV(被动)模式进行数据传输。这是通过-p开关完成的。

我不确定您是否能够使用此ftp-client执行递归文件列表。在我的案例中,ls -R只提供了当前工作目录中的文件和目录列表。也许Recursive FTP directory listing in shell/bash with a single session (using cURL or ftp)会帮助你。

答案 3 :(得分:3)

curl ftp://user:password@<ip>/path/

如果是目录,则必须使用最后一个/。这适用于curl版本7.29.0

答案 4 :(得分:2)

在登录ls命令提交到ftp连接(被动)后,我一直在Linux系统中运行此FTP脚本。文件列表被写入标准输出流。脚本内联在sh脚本文件中。

#!/bin/sh

HOST=11.22.33.44
USER=myuser
PWD="mypwd"

ftp -p -n $HOST <<END_SCRIPT
quote USER $USER
quote PASS $PWD
ls
quit
END_SCRIPT
exit 0

答案 5 :(得分:0)

正如我的评论之一中提到的,永远不要在命令中使用user:password作为纯文本,否则您将面临蜂拥历史被劫持的危险!而是至少使用带有用户名+密码的受保护/受限制的文件,并在命令中替换它,例如:

ftp://yourftpserver/dir/ --user "$(cat .userpw)"

.userpw是您受保护/受限制的文件,其内容示例:myusername:mypassword