从FTP服务器获取文件列表

Raz*_*Raz 14 ftp bash

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

我已经尝试使用bash脚本来获取信息,但我对linux不是很有经验,而且我真的不知道我在做什么.

我的脚本看起来像这样:

#!/bin/bash
hostname="<host>"
ftp -i -nv $hostname << EOF
user <username> <password>
ls -R 
EOF
Run Code Online (Sandbox Code Playgroud)

运行上面的脚本我得到

?Invalid command
501 Illegal PORT command
ftp: bind: Address already in use
221 Goodbye
Run Code Online (Sandbox Code Playgroud)

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

小智 33

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

  • 仅供参考:`curl -l`只返回名字. (13认同)
  • 我不明白为什么大多数人在他们的命令中使用 username:password,这是不好的做法,可能会被历史劫持!至少使用一个(受保护的)文件并替换它,例如:`curl ftp://yourftpserver/dir/ --user "$(cat .userpw)"` (3认同)
  • 你如何编写它来递归? (2认同)

Pat*_* B. 6

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

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


Acu*_*nus 6

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

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

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

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


Tal*_*Kit 6

curl ftp://user:password@<ip>/path/
Run Code Online (Sandbox Code Playgroud)

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