【问题标题】:How do I recursively ftp only certain file types from a linux server using the command line?如何使用命令行仅从 linux 服务器递归 ftp 某些文件类型?
【发布时间】:2010-11-15 22:59:03
【问题描述】:

我只想从我的服务器下载 .htm 或 .html 文件。我正在尝试使用 ncftpget 甚至 wget,但效果有限。

使用 ncftpget 我可以毫无问题地下载整个树结构,但似乎无法指定我想要哪些文件,要么全有,要么全无。

如果我这样指定文件类型,它只会在顶层文件夹中查找:

ncftpget -R -u myuser -p mypass ftp://ftp.myserver.com/public_html/*.htm ./local_folder

如果我这样做,它会下载整个网站,而不仅仅是 .htm 文件:

ncftpget -R -u myuser -p mypass ftp://ftp.myserver.com/public_html/ ./local_folder *.htm

我可以使用 ncftp 来执行此操作吗,或者我应该使用其他工具吗?

【问题讨论】:

    标签: file recursion ftp types


    【解决方案1】:

    你可以用 wget 做到这一点

    wget -r -np -A "*.htm*" ftp://site/dir
    

    或:

    wget -m -np -A "*.htm*" ftp://user:pass@host/dir
    

    但是,根据Types of Files:

    请注意,这两个选项不会影响 HTML 文件的下载(由 .htm.html 文件名前缀决定)。这种行为可能并不适合所有用户,并且可能会在 Wget 的未来版本中进行更改。

    【讨论】:

    • 您应该转义 *.htm* 以将其传递给 wget,例如 '*.htm*'
    【解决方案2】:

    wget 命令理解常规的 unix 文件通配语法。

    wget -r -np --ftp-user=username --ftp-password=password "ftp://example.com/path/to/dir/*.htm"
    

    相反,您可以使用-A 选项,它接受以逗号分隔的文件名后缀或模式列表。

    wget -A '*.htm'
    

    -R 选项与-A 相反,因此您可以使用它来指定不获取的模式。

    警告:一定要引用模式!否则,您的 shell可能会扩展 glob 本身,从而导致意外结果。

    还有!请参阅有关服务器故障的"Using wget to recursively download whole FTP directories" 问题。

    【讨论】:

      【解决方案3】:

      ncftpget 是否理解 dir glob?

      试试

      ncftpget -R -u myuser -p mypass ftp://ftp.myserver.com/public_html/**/*.htm ./local_folder
      

      ** 表示任意数量的目录。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-18
        • 1970-01-01
        • 2012-07-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多