从FTP服务器获取文件列表

问题描述 投票:13回答:5

我正在尝试获取我们在服务器上的所有文件的列表(特别是我们在那里的每个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

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

bash ftp
5个回答
4
投票

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

我不确定你是否能用这个ftp-client做一个递归文件列表。在我的情况下,ls -R只提供了当前工作目录中的文件和目录列表。也许Recursive FTP directory listing in shell/bash with a single session (using cURL or ftp)会帮助你。


32
投票

有了卷曲,这很方便 curl ftp://yourftpserver/dir/ --user username:password


6
投票

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

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

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

ncftplsncftp包提供。对于RHEL,此软件包可在epel repo中找到。


3
投票
curl ftp://user:password@<ip>/path/

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


0
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.