19

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

任何帮助或指出我要搜索的内容将不胜感激。

4

6 回答 6

45

使用 curl,这很方便
curl ftp://yourftpserver/dir/ --user username:password

于 2013-04-06T21:28:35.457 回答
6

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

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

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

ncftplsncftp包提供。对于 RHEL,此包在epelrepo 中可用。

于 2014-09-10T23:48:00.257 回答
6
curl ftp://user:password@<ip>/path/

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

于 2017-02-08T09:54:05.690 回答
4

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

我不确定您是否能够使用此 ftp 客户端进行递归文件列表。ls -R就我而言,只是给出了当前工作目录中的文件和目录列表。也许shell/bash 中的递归 FTP 目录列表与单个会话(使用 cURL 或 ftp)会对您有所帮助。

于 2013-03-29T15:30:36.370 回答
4

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

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

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

于 2019-03-06T15:49:55.790 回答
3

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
于 2020-06-30T13:44:52.707 回答