我正在尝试获取服务器上所有文件的列表(特别是我们在那里的每个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
任何帮助或指出我要搜索什么将不胜感激。
答案 0 :(得分:31)
使用卷曲,这是方便的curl ftp://yourftpserver/dir/ --user username:password
答案 1 :(得分:5)
ncftpls ftp://yourftpserver/dir/*.pdf
请注意,上述命令中的*.pdf
等模式可以按预期工作。
对于递归,请使用-R
。有关更多选项,请参阅man ncftpls
。
ncftpls
由ncftp
包提供。对于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