从FTP服务器获取文件列表

23

我想要获取我们服务器上所有文件的列表(特别是其中每个pdf文件)。我尝试使用Total Commander和搜索文件,取得了一定的成功,在那里找到了我们所拥有的每个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

任何帮助或指引我搜索的方向都将不胜感激。
7个回答

49

使用curl非常方便
curl ftp://你的ftp服务器目录/ --user 用户名:密码


22
了解:curl -l 仅返回名称。 - Asclepius
4
如何编写递归脚本? - B Johnson
6
我不明白为什么大多数人在命令中使用用户名:密码,这是不好的做法并且可能会被黑客盗取历史记录!至少要使用一个(受保护的)文件并对其进行替换,例如: curl ftp://yourftpserver/dir/ --user "$(cat .userpw)" - ioCron
有没有人类可读的大小输出版本? - zabop

7

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

请注意,上述命令中的*.pdf等模式可以按预期工作。
如需递归,请使用-R。有关更多选项,请参见man ncftplsncftplsncftp软件包提供。对于RHEL,此软件包可在epel存储库中获取。

谢谢 @A-B-B,我不知道这个实用程序。现在我可以使用以下命令获取最新的 coreutils 源代码压缩包名称:ncftpls -x "-t" ftp://ftp.gnu.org/gnu/coreutils/coreutils*.xz|head -1 - Setaa
很遗憾这个不使用 .netrc。 - mckenzm

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

最后的/如果是一个目录,则是必须的。这在curl版本7.29.0中有效。

6

4

正如我在评论中提到的那样,永远不要将用户:密码作为明文放入你的命令中,否则你就有被黑客攻击的风险!相反,使用至少一个受保护/受限制的文件存储用户名和密码,并在命令中替换它,例如:

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

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


3

我一直在Linux系统中运行这个FTP脚本,在登录后,提交ls命令到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

0
curl --list-only ftp://user:password@ftp.adress/directory/JPG/

用 CURL 请求列出文件


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接