首页主机资讯SFTP如何批量传输文件

SFTP如何批量传输文件

时间2025-10-21 13:02:03发布访客分类主机资讯浏览615
导读:SFTP批量传输文件的常见方法 1. 使用命令行工具(基础批量操作) 命令行是最直接的批量传输方式,适合简单场景。核心命令包括mput(批量上传)和mget(批量下载): 批量上传:连接SFTP服务器后,使用mput命令配合通配符上传本地...

SFTP批量传输文件的常见方法

1. 使用命令行工具(基础批量操作)

命令行是最直接的批量传输方式,适合简单场景。核心命令包括mput(批量上传)和mget(批量下载):

  • 批量上传:连接SFTP服务器后,使用mput命令配合通配符上传本地目录所有文件。例如:
    sftp username@hostname → 输入密码 → 执行mput /local/path/*(将本地/local/path/下所有文件上传至远程当前目录)。
  • 批量下载:类似地,使用mget命令下载远程文件。例如:
    mget /remote/path/*.txt(下载远程/remote/path/下所有.txt文件至本地当前目录)。
  • 注意事项mput/mget默认会逐个确认文件传输,若需跳过确认,可添加-i参数(如mput -i /local/path/*)。

2. 编写Shell脚本(自动化批量操作)

通过Shell脚本可自动化执行批量传输流程,避免重复输入命令:

  • 基础脚本示例:创建upload.sh文件,内容如下:
    #!/bin/bash
    sftp username@hostname <
        <
        EOF
    cd /remote/directory  # 切换至远程目标目录
    mput /local/directory/*  # 批量上传本地目录文件
    bye  # 退出SFTP会话
    EOF
    
    赋予执行权限后运行:chmod +x upload.sh./upload.sh
  • 带循环的复杂脚本:若需逐个处理文件(如添加日志),可使用for循环。例如:
    #!/bin/bash
    sftp username@hostname <
        <
        EOF
    cd /remote/directory
    $(for file in /local/directory/*;
         do echo "put \"$file\"";
         done)
    bye
    EOF
    

3. 使用Python脚本(灵活批量操作)

通过paramikopysftp库可实现更灵活的批量操作(如过滤文件类型、错误处理):

  • paramiko示例(批量上传/下载)
    import paramiko
    import os
    
    # 连接SFTP服务器
    ssh = paramiko.SSHClient()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    ssh.connect('hostname', username='username', password='password')
    sftp = ssh.open_sftp()
    
    # 批量上传:本地目录→远程目录
    local_dir = '/local/path'
    remote_dir = '/remote/path'
    for filename in os.listdir(local_dir):
        local_file = os.path.join(local_dir, filename)
        remote_file = os.path.join(remote_dir, filename)
        sftp.put(local_file, remote_file)
    print("批量上传完成!")
    
    # 批量下载:远程目录→本地目录
    for filename in os.listdir(remote_dir):
        remote_file = os.path.join(remote_dir, filename)
        local_file = os.path.join(local_dir, filename)
        sftp.get(remote_file, local_file)
    print("批量下载完成!")
    
    sftp.close()
    ssh.close()
    
  • pysftp示例(简化版)
    import pysftp
    import os
    
    with pysftp.Connection('hostname', username='username', password='password') as sftp:
        # 批量上传
        sftp.put_d('/local/path', '/remote/path')  # 上传整个本地目录
        # 批量下载
        sftp.get_d('/remote/path', '/local/path')  # 下载整个远程目录
    

4. 图形化工具(可视化批量操作)

若偏好可视化操作,可使用以下工具:

  • FileZilla
    1. 打开FileZilla,输入服务器地址、用户名、密码连接。
    2. 左侧“本地站点”面板选择需传输的文件/文件夹,按住Ctrl键多选。
    3. 拖放到右侧“远程站点”面板对应目录,完成批量传输。
  • WinSCP
    1. 新建站点连接,输入服务器信息并登录。
    2. 左侧文件资源管理器选择文件,拖放到右侧远程目录,支持多文件快速传输。

5. 使用expect工具(自动化交互式脚本)

若需处理密码输入等交互场景,可使用expect工具编写自动化脚本:

  • 示例脚本:创建sftp_batch.exp文件,内容如下:
    #!/usr/bin/expect -f
    set timeout 20
    set host "remote_host"
    set user "username"
    set password "password"
    set local_dir "/local/path"
    set remote_dir "/remote/dir"
    
    spawn sftp $user@$host
    expect "password:"
    send "$password\r"
    expect "sftp>
        "
    send "cd $remote_dir\r"
    expect "sftp>
    "
    
    # 遍历本地目录并上传文件
    foreach file [glob -nocomplain -- $local_dir/*] {
        
        set filename [file tail $file]
        send "put $file $filename\r"
        expect "sftp>
    "
    }
        
    
    send "bye\r"
    expect eof
    
    赋予执行权限后运行:chmod +x sftp_batch.exp./sftp_batch.exp

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: SFTP如何批量传输文件
本文地址: https://pptw.com/jishu/731071.html
SFTP如何进行文件权限管理 SFTP如何进行文件共享

游客 回复需填写必要信息