如何让Paramiko SCP完整复制远程目录本身及其内容至本地
解决Paramiko SCP复制远程目录本身到本地的问题
你遇到的问题是因为远程路径末尾带斜杠导致的:当remote_path以斜杠结尾时,SCPClient会仅复制该目录下的内容到本地指定路径,而非目录本身。要实现先创建目录e再复制内容的效果,只需调整两个参数的写法:
调整后的代码
def main(): ssh_client = paramiko.SSHClient() ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) private_key = paramiko.RSAKey(filename="/home/harry/.ssh/id_rsa") ssh_client.connect(host_name, port = 22, username = user_name, private_key) scp = SCPClient(ssh_client.get_transport()) # 去掉远程路径末尾的斜杠,本地路径指定为目标父目录 scp.get(remote_path=f"/a/b/c/d/e", local_path=f"./f/", recursive=True, preserve_times=True) scp.close() ssh_client.close()
原理说明
- 当
remote_path不带末尾斜杠时,SCPClient会将整个e目录作为复制对象,将其完整复制到local_path指定的./f/目录下,最终形成./f/e/结构,包含原远程目录的所有内容。 - 如果你的本地
./f/目录不存在,SCPClient会自动创建它,无需额外手动创建。
内容的提问来源于stack exchange,提问作者Harry
相关产品推荐
相关产品推荐

