tags: tutorials ubuntu linux SSH file transfer

rsync

$ rsync -vrazh --info=progress2 -e 'ssh -p {port_num}' {dir_or_path} {remote_username}@{remote_ip}:{remote_location}
  • -v: verbose 模式,輸出比較詳細的訊息。
  • -r: 遞迴(recursive)備份所有子目錄下的目錄與檔案。
  • -a: 封裝備份模式,相當於 -rlptgoD,遞迴備份所有子目錄下的目錄與檔案,保留連結檔、檔案的擁有者、群組、權限以及時間戳記。
  • -z: 啟用壓縮。(降低網路使用量,不過由於壓縮需要時間會導致傳輸耗時增加,如果網速夠快則可以不用加)
  • -h: 將數字以比較容易閱讀的格式輸出。
  • --info=progress2: 顯示目前整體傳送百分比,--info=progress 則是會依照個檔案顯示該檔案傳送百分比
  • --progress: 可以顯示傳送進度
  • -e: 指定遠端登入所要使用的指令 (搭配後面字串)
    • ssh: 以 ssh 方式連線
    • -p: 指定 port
      • {port_num}: 指定遠端連線 server 的 port
  • {dir_or_path}: 本地端要複製到遠端 server 的檔案或資料夾 (如果是複製整個資料夾,結尾不要加 /,如果只要複製資料夾內容所有檔案則結尾要加 /)
  • {remote_username}: 遠端 server 的登入使用者名稱
  • {remote_ip}: 遠端 server 的 ip
  • {remote_location}: 要放到遠端 server 的位置

更多資訊可以參考: https://blog.gtwang.org/linux/rsync-local-remote-file-synchronization-commands/

例如

$ rsync -e 'ssh -p 2266' -ah --info=progress /local/path/to/dir msp@123.456.78.999:/remote/to/path/

這個指令就是將本地端 /local/path/to/dir 整個 dir 資料夾傳送到 123.456.78.999msp 使用者的 /remote/to/path/ 資料夾下,並使用 ssh 的 port 2266 連線,使用 --info=progress 列出目前傳送的資訊

  • 如果將 /local/path/to/dir 改寫成 /local/path/to/dir/ 則是將資料夾下的所有檔案傳送過去,不會傳送 dir 資料夾本身
  • --info=progress 也可寫成 --progress