溫馨提示×

SFTP如何批量傳輸文件

小樊
44
2025-10-21 05:58:22
欄目: 編程語言

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。

0
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女