我正在尝试使用命令行 ftp 客户端对文件夹进行 ftp,但到目前为止,我只能使用“get”来获取单个文件。
12 回答
您可以依赖 wget 通常可以正确处理 ftp get (至少以我自己的经验)。例如:
wget -r ftp://user:pass@server.com/
您也可以使用-m
适合镜像的。目前相当于-r -N -l inf
.
如果凭据详细信息中有一些特殊字符,则可以指定--user
和--password
参数以使其工作。具有特定字符的自定义登录示例:
wget -r --user="user@login" --password="Pa$$wo|^D" ftp://server.com/
正如@asmaier 所指出的,请注意,即使-r
是用于递归,它的默认最大级别为 5:
-r --recursive Turn on recursive retrieving. -l depth --level=depth Specify recursion maximum depth level depth. The default maximum depth is 5.
如果您不想错过子目录,最好使用镜像选项-m
:
-m --mirror Turn on options suitable for mirroring. This option turns on recursion and time-stamping, sets infinite recursion depth and keeps FTP directory listings. It is currently equivalent to -r -N -l inf --no-remove-listing.
只是为了补充Thibaut Barrère 给出的答案。
我用了
wget -r -nH --cut-dirs=5 -nc ftp://user:pass@server//absolute/path/to/directory
请注意服务器名称后的双斜杠。如果您不添加额外的斜杠,则路径是相对于用户的主目录的。
-nH
避免创建以服务器名称命名的目录-nc
如果目标上已经存在新文件,则避免创建新文件(它只是被跳过)--cut-dirs=5
允许获取 /absolute/path/to/directory 的内容并将其放在启动 wget 的目录中。数字 5 用于过滤掉路径的 5 个分量。双斜线表示一个额外的组件。
ncftp -u <user> -p <pass> <server>
ncftp> mget directory
如果lftp
安装在您的机器上,请使用mirror dir
. 你完成了。如果您想递归下载目录,请参阅下面 Ciro 的评论。
如果您可以使用scp
代替ftp
,该-r
选项将为您执行此操作。我会检查您是否可以使用比 FTP 更现代的文件传输机制。
请改用 WGet。它支持 HTTP 和 FTP 协议。
wget -r ftp://mydomain.com/mystuff
祝你好运!
有 'ncftp' 可用于在 linux 中安装。这适用于 FTP 协议,可用于递归下载文件和文件夹。在linux上工作。已被使用并且在递归文件夹/文件传输中运行良好。
检查此链接... http://www.ncftp.com/
如果可以的话,我强烈建议您tar
和bzip
(或者gzip
,随便什么东西)远程机器上的目录——对于任何显着大小的目录,节省的带宽可能值得花时间进行压缩/解压缩。
如果你想坚持使用命令行 FTP,你应该尝试 NcFTP。然后您可以使用 get -R 递归获取文件夹。你也将完成。
wget -r ftp://url
完美适用于 Redhat 和 Ubuntu
你不应该使用ftp
. 就像telnet
它没有使用安全协议一样,密码以明文形式传输。这使得第三方很容易捕获您的用户名和密码。
要远程复制远程目录,这些选项更好:
rsync
如果您可以通过 登录,它是最适合的工具ssh
,因为它只复制差异,并且可以轻松地在中间重新启动,以防连接中断。ssh -r
是递归复制目录结构的次佳选择。
要递归地获取文件,您可以使用如下脚本: https ://gist.github.com/flibbertigibbet/8165881
看:
通过 PROMPT 命令切换提示。
用法:
ftp>cd /to/directory
ftp>prompt
ftp>mget *