如何在 linux 上使用 sftp 上传包含其他文件夹的整个文件夹?

Posted

技术标签:

【中文标题】如何在 linux 上使用 sftp 上传包含其他文件夹的整个文件夹?【英文标题】:How can I upload an entire folder, that contains other folders, using sftp on linux? 【发布时间】:2012-04-22 12:26:47 【问题描述】:

我试过put -r directory/*,它只上传文件而不上传文件夹。给我错误,不能Couldn't canonicalise

任何帮助将不胜感激。

【问题讨论】:

试试不带斜线和星号的“放置目录”。 ***.com/questions/10084941/… 【参考方案1】:

对于真正想要直接回答这个问题的人(而不是被告知使用 sftp 以外的其他东西)...

put -r local/path/to/directoryName

上传的目录必须已经存在于服务器的工作目录中,所以您可能需要先创建它。

mkdir directoryName

【讨论】:

当我尝试 put -r somefile 我得到“invalid flag -r” 谢谢 - 有人将此作为公认的答案。 对于像我这样没有幸使用最新版本的 OpenSSH 的可怜用户,应该注意一下 - 递归 get 和 put 是在 5.4 中添加的,那些在 CentOS 或类似设备上的可能正在运行除非他们手动更新了早期版本。 在互联网上搜索了几个小时,这是我发现唯一有效的方法。谢谢本蒂尔克!多么节省时间和救命稻草。 有点困惑为什么这个答案有这么多赞成票。对于需要复制具有 n 个子目录和 2k 个文件的目录的人,如果我需要创建每个子目录,则此答案没有帮助。这个答案并不适用于所有情况。【参考方案2】:

Here你可以找到详细的解释如何使用scp复制一个目录。在你的情况下,它会是这样的:

$ scp -r foo your_username@remotehost.edu:/some/remote/directory/bar

这会将目录“foo”从本地主机复制到远程主机的目录“bar”。 这里-r 是-递归复制整个目录。

您也可以使用类似语法的rcp。它们之间的唯一区别是scp 使用安全shell 而rcp 使用远程shell。

顺便说一句当 sftp 服务器无法访问命令中提到的文件/目录时,会出现您提到的“无法规范化”错误。

更新:对于特别想使用put 的用户,请在此处参考 Ben Thielker 的回答。

【讨论】:

当目标仅支持 SFTP 而不是 SSH 时,这将不起作用。【参考方案3】:
sftp> mkdir source
sftp> put -r source
 Uploading source/ to /home/myself/source
 Entering source/
 source/file1
 source/file2

【讨论】:

【参考方案4】:

如果您在使用 sftp 时遇到问题,可以使用 ncftp 对于centos

yum install ncftp

递归复制整个目录

ncftpput -R -v -u username -P 21 ftp.server.dev /remote-path/ /localdirectory

【讨论】:

【参考方案5】:

请改用scp。它也使用 SSH,并且可以轻松处理递归。

【讨论】:

scp 确实更胜一筹,但并不是所有的sftp 服务器都支持scp 连接,所以有时需要sftp 本身。 目前我在一个支持 sftp 但不支持 scp 的 C++ 代码库中,所以这对我也不起作用。 scp 并不总是答案。

以上是关于如何在 linux 上使用 sftp 上传包含其他文件夹的整个文件夹?的主要内容,如果未能解决你的问题,请参考以下文章

在 Linux 中使用 sFTP 上传或下载文件与文件夹

我使用的是SecureCRTP来连接linux,请问如何把文件从本地电脑上传到linux服务器上?具体点,谢谢

Linux 限制SFTP用户目录和权限

linux下如何使用sftp命令

揭秘SFTP&&SCP命令 Linux详解

java向SFTP服务器上传文件,如何判断服务器上的文件夹是不是存在?