当我尝试使用 sftp 传输包含文件的目录时,收到一条错误消息:
skipping non-regular file directory_name
该目录包含几个文件和两个子目录。
我究竟做错了什么?
答案1
sftp
与 和 一样cp
,scp
要求当您复制文件夹(显然是其内容)时,您必须明确告诉它您要使用该-r
选项递归地传输文件夹。
因此,添加-r
到命令中。
答案2
我只能建议,你使用rsync
.通过安全连接移动文件时,这在某种程度上是一种行业标准。
rsync -alPvz ./source_dir server.com:destination_dir
这是我多年来一直使用的。
(该-a
选项负责目录递归等事情)
答案3
这对我有用:
1)通过连接sftp
到远程主机
2) 切换到您要复制的远程目录。 (示例:CD 音乐)
3)更改为您要将内容复制到的本地目录。 (例如:液晶台式机)
4) 发出此命令:get -r *
答案4
如果你的问题实际上是“我如何使用 sftp 传输目录”,那么
sftp -r user@server
但如果您传输目录,我可能会根据您的需要建议两个更好的选择。 sftp
需要在类似 ssh 的命令提示符下登录远程服务器,但如果您想要的只是文件,还有更简单、更快捷的方法。
SCP
对于一次性传输,上传尝试:
# upload source directory to remote server
scp -rp source_dir user@server:dest
#download directory from remote server:
scp -rp user@server:source_dir dest
#specifying ssh key:
scp -rp -i ~/.ssh/key user@server:source_dir dest
#remote directory has spaces
scp -rp -i ~/.ssh/key user@server:"source\\ dir" dest
同步
如果您计划定期同步目录,那么使用 rsync 更有意义。它在两个目录之间执行增量操作,从而节省传输时间和网络数据。
rsync -r -a -v -e ssh --delete source_dir user@server:dest
以下是一些最常见的 rsync 选项的列表:(取自这里)
- --delete - 删除发送者(系统)上不存在的文件
- -v - 详细(-vv 将提供更详细的信息)
- -e "ssh options" - 指定 ssh 作为远程 shell
- -a - 存档模式 - 它保留权限(所有者、组)、时间、符号链接和设备
- -r - 递归到目录
- -z - 在传输期间压缩文件数据
- --exclude 'foldername' – 从传输中排除相应的文件夹
- -P – 显示传输过程中的进度
希望有帮助!