rsync
概述
rsync 是用於高效檔案同步的標準工具。它只傳輸檔案的變更部分(差異傳輸),支援 SSH,能處理權限,適用於備份、部署和目錄鏡像。
指令
步驟 1:基本用法
# 同步本地目錄
rsync -avz source/ destination/
# -a = 歸檔模式(保留權限、時間戳、符號連結)
# -v = 詳細輸出
# -z = 傳輸時壓縮
# 同步到遠端伺服器
rsync -avz ./dist/ deploy@server:/var/www/myapp/
# 從遠端同步
rsync -avz deploy@server:/var/log/myapp/ ./logs/
# 測試執行(顯示將何種變更,但實際不執行)
rsync -avzn source/ destination/
步驟 2:常見模式
# 部署網站(刪除目標端不存在於來源的檔案)
rsync -avz --delete ./build/ deploy@server:/var/www/site/
# 備份並排除
rsync -avz --exclude='node_modules' --exclude='.git' --exclude='.env' \
/opt/myapp/ /backups/myapp/
# 使用硬連結的增量備份(節省空間)
rsync -avz --link-dest=/backups/latest \
/opt/myapp/ /backups/$(date +%Y%m%d)/
ln -snf /backups/$(date +%Y%m%d) /backups/latest
# 限制頻寬(適用於大量傳輸)
rsync -avz --bwlimit=5000 source/ destination/ # 5000 KB/s
步驟 3:部署腳本
#!/bin/bash
# scripts/deploy.sh — 使用 rsync 部署應用程式
SERVER="[email protected]"
REMOTE_DIR="/var/www/myapp"
echo "正在建置..."
npm run build
echo "正在同步檔案..."
rsync -avz --delete \
--exclude='node_modules' \
--exclude='.env' \
--exclude='.git' \
./dist/ ${SERVER}:${REMOTE_DIR}/
echo "正在重新啟動服務..."
ssh ${SERVER} "sudo systemctl restart myapp"
echo "部署完成!"
指南
- 使用
--delete時,務必先使用-n(測試執行)以避免意外資料遺失。 - 尾隨斜線很重要:
source/會同步內容,source則會同步目錄本身。 - 對於大量傳輸,可加上
--progress來查看每個檔案的傳輸進度。 - rsync 透過 SSH 傳輸時預設加密,適合在網際網路上傳送資料。