使用 rsync 同步你的檔案

rsync 是一個強大的檔案同步工具,它能夠跨網路和本地進行檔案和目錄同步,最大的優點是透過檢查檔案的大小和時間戳記來確定哪些檔案需要被更新,因此可以大大節省傳輸時間和頻寬

什麼是 rsync

rsync 最常用於備份和網路同步。例如,你可以使用 rsync 將本地目錄與遠端主機上的目錄同步,還可以使用 rsync 將檔案傳送到其他電腦或網路儲存裝置

rsync 具有許多優點,其中之一是其能夠選擇性地同步檔案。這表示你可以指定要同步哪些檔案或目錄,並且可以選擇性地忽略某些檔案,還有一個重要的功能是,rsync 可以在同步過程中使用差異檔案

rsync 參數說明

以下列一些常用參數,詳細參數可以參考官網文件 documentation

  • -a:這個參數的意思是指將資料夾的所有內容都傳送過去,包括子目錄和檔案的屬性,例如權限、擁有者、群組、時間戳記等等
  • -v:運行時輸出詳細的資訊,例如傳輸了多少資料
  • -z:傳輸資料時進行壓縮
  • -h:輸出資訊時,將檔案大小以易讀的方式顯示,例如 1K、234M、2G 等等
  • -P:傳輸資料時顯示進度條
  • --delete:如果來源檔案不存在,但遠端檔案存在,則會刪除遠端主機上的檔案,但是不會刪除目錄
  • --exclude:排除某些檔案或目錄,例如 --exclude="*.log" 表示排除所有的 log 檔案
  • --remove-source-files:傳輸完檔案後,刪除來源檔案

使用範例

同步檔案

這是一個上傳的範例,它將本地的 xxx.zip 檔案上傳到遠端主機的 /tmp 目錄下,並使用 codingman 使用者登入

對照一下 rsync 參數說明 這個範例使用了 -a-v-z-h 這幾個參數

表示我希望盡可能地將檔案屬性傳送過去,並且希望在運行時能夠看到詳細的資訊,並且希望能夠將資料進行壓縮,最後希望能夠將檔案大小以易讀的方式顯示

1
rsync -avzh xxx.zip [email protected]:/tmp

定時同步

你也可以結合 crontab 來定時同步檔案,例如我希望每天 0 點 0 分 0 秒將本地的 /home/codingman/backup 目錄同步到遠端主機的 /home/codingman/backup 目錄下

1
0 0 * * * rsync -avzh /home/codingman/backup [email protected]:/home/codingman/backup

關於 crontab 的使用方式,可以參考 使用 crontab 排程自動化你的工作

寫在最後

我如果有其他常用的 rsync 使用方式,會再更新這篇文章

也許你也會想看看