【问题标题】:Get list of files from FTP server从 FTP 服务器获取文件列表
【发布时间】:2013-03-20 07:52:47
【问题描述】:

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


    【解决方案1】:

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

    【讨论】:

    • 仅供参考:curl -l 仅返回名称。
    • 你如何编写脚本来递归?
    • 我不明白为什么大多数人在他们的命令中使用用户名:密码,这是不好的做法,可能会被历史劫持!至少使用(受保护的)文件并使用替代文件,例如:curl ftp://yourftpserver/dir/ --user "$(cat .userpw)"
    【解决方案2】:

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

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

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

    ncftplsncftp 包提供。对于 RHEL,此软件包可在 epel 存储库中获得。

    【讨论】:

    • 谢谢@A-B-B,我不知道这个实用程序。现在我可以这样做来获取最新的coreutils源代码tarball的名称:ncftpls -x "-t" ftp://ftp.gnu.org/gnu/coreutils/coreutils*.xz|head -1
    • 很遗憾这不使用.netrc
    【解决方案3】:
    curl ftp://user:password@<ip>/path/
    

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

    【讨论】:

      【解决方案4】:

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

      我不确定您是否能够使用此 ftp 客户端进行递归文件列表。 ls -R 在我的例子中只是给出了当前工作目录中的文件和目录列表。也许Recursive FTP directory listing in shell/bash with a single session (using cURL or ftp) 会帮助你。

      【讨论】:

        【解决方案5】:

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

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

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

        【讨论】:

          【解决方案6】:

          我一直在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
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多