###### tags: `tutorials` `ubuntu` `linux` `SSH` `file transfer` # rsync ```bash= ! $ rsync -vazh --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/ :::info 例如 ```bash= ! $ 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.999` 的 `msp` 使用者的 `/remote/to/path/` 資料夾下,並使用 `ssh` 的 port `2266` 連線,使用 `--info=progress` 列出目前傳送的資訊 > - 如果將 `/local/path/to/dir` 改寫成 `/local/path/to/dir/` 則是將資料夾下的所有檔案傳送過去,不會傳送 `dir` 資料夾本身 > - `--info=progress` 也可寫成 `--progress` :::