10 個有用的 Linux rsync 命令示例
已發表: 2022-10-28
 Linux rsync命令是一個強大的文件複製和文件夾同步工具。 這裡有十個常見用例,您可以在自己的系統上充分利用它們。
rsync 工具
rsync工具在兩台計算機之間複製文件和目錄。 它使用一種複雜的算法掃描目錄樹以查找源計算機上目標計算機上不存在的文件。 這些文件被傳輸到目標計算機。 rync如此聰明的原因在於它可以找出哪些現有文件已被修改,並且它只發送已更改的部分。
 您可以使用rsync將文件複製到硬盤驅動器上的不同位置、同一計算機中的不同硬盤驅動器、外部連接的 USB 驅動器或任何其他網絡可訪問的位置。 
最重要的是, rsync可以選擇保留符號鏈接、硬鏈接和文件元數據,例如文件所有權、權限和訪問時間。 為了支持所有這些功能, rsync有許多選項,並且將它們全部弄清楚需要時間。 我們收集了這 10 個示例來幫助您入門。 我們已經寫過關於使用rsync進行備份的文章,所以我們在這裡專注於其他用途。
 對於它的所有選項, rsync命令的結構很簡單。 我們需要提供源、目的地和我們想要使用的選項。 你可能會發現rsync已經安裝在你的 Linux 計算機上——它安裝在我們所有的測試機器上——但如果沒有,它肯定會在你的發行版的存儲庫中。
1.將文件複製到不同的目錄
這是一個簡單的例子,讓我們繼續前進。 我們要將文件從“project-files”目錄複製到“Documents”目錄。 我們使用兩個選項, -a (歸檔)選項和-v (詳細)選項。 verbose 選項告訴rsync解釋它在做什麼。 archive選項保留文件所有權和我們稍後將看到的其他一些項目。
 命令的格式是options source-location destination-location 。
rsync -av /home/dave/project-files/ /home/dave/Documents/

 在“Documents”文件夾上使用ls顯示文件已被複製。 

 當rsync工作時,文件會在復制時列出。 被告訴:
- 發送的字節數。
-  接收的字節數。 在文件傳輸發生之前, rsync必須確定需要傳輸哪些文件。 為此,必須通過rsync檢索有關目標文件的一些信息。 該信息包含在接收的字節中。
- 傳輸速度。
- 複製文件的總大小。
- “加速”。 這是總大小除以發送和接收字節之和的比率。 這個數字越高,傳輸效率越高。
 我們修改了源目錄中的文本文件並重複了rsync命令。
rsync -av /home/dave/project-files/ /home/dave/Documents/

這次唯一需要更新的文件是我們修改的文本文件。 加速數字現在是 30,850。 這就是複制單個文件的修改部分比複製所有文件效率高得多。
 -a (歸檔)選項實際上代表了其他選項的集合。 這與使用所有這些選項相同:
- r :遞歸處理源目錄中的目錄樹並將它們複製到目標目錄,如果它們不存在則創建它們。
- l :將符號鏈接複製為符號鏈接。
- p :保留文件權限。
- t :保留文件修改時間。
- g :保留組權限。
- o :保留文件所有權。
- D :複製特殊文件和設備文件。 特殊文件可以是被視為文件的以通信為中心的項目,例如套接字和先進先出管道 (fifos)。 設備文件是提供對設備和偽設備的訪問的特殊文件。
 這是一個經常使用的組合,以至於rsync提供了-a (歸檔)選項作為調用它們的簡寫方式。
2.將目錄複製到不同的目錄
如果您查看前面的rsync命令,您會在源目錄的文件路徑上看到尾部正斜杠“/”。 這很重要。 它告訴rsync複製目錄的內容。 如果您不提供尾部正斜杠, rsync將復制目錄及其內容。
rsync -av /home/dave/project-files /home/dave/Documents/

這一次,目錄名稱被添加到列出的文件名中。 如果我們查看目標目錄,我們會看到源文件夾已被複製到其中的文件。
ls 文件/
ls 文檔/項目文件/

3. 將目錄複製到不同的驅動器
將文件複製到同一硬盤驅動器上的另一個位置並不能保護您免受驅動器故障。 如果該驅動器放棄了幽靈,那麼您就丟失了這些文件的源副本和目標副本。 將它們複製到另一個硬盤驅動器是保護數據的一種更可靠的方法。 我們需要做的就是提供到目標驅動器的正確路徑。
rsync -av /home/dave/project-files /run/mount/drive2

查看另一個硬盤驅動器向我們展示了已復製到其中的目錄和文件。
ls 運行/掛載/drive2/項目文件/

相關:當您的硬盤驅動器出現故障時該怎麼辦
4. 先做空運行
在我們了解rsync如何有效地為我們刪除文件之前,讓我們看看我們如何使rsync執行空運行。
 在試運行中, rsync會執行我們要求的動作,但實際上並沒有執行它們。 它報告如果命令被執行會發生什麼。 這樣,我們可以確保該命令完全符合我們的預期。
 要強制進行空運行,我們使用--dry-run選項。
rsync -av --dry-run /home/dave/geocoder /run/mount/drive2

 為我們列出了可能被複製的文件,我們得到了通常的統計數據,然後是消息(DRY RUN) ,這樣我們就知道實際上沒有發生任何事情。

5. 刪除目標目錄中的文件
--delete選項告訴rsync刪除目標目錄中不在源目錄中的文件和目錄。 這意味著目標目錄將是源目錄的精確副本。 我們將謹慎並首先使用--dry-run選項。
rsync -av --delete --dry-run /home/dave/geocoder /run/mount/drive2

 我們被告知有兩個文件將被刪除。 如果我們確定我們不在乎它們會被刪除,我們可以刪除--dry-run選項並真正執行該命令。
rsync -av --delete /home/dave/geocoder /run/mount/drive2

這次目錄的內容是同步的,兩個多餘的文件被刪除了。
6. 刪除源文件
您可以選擇在傳輸成功後刪除源文件,使rsync的操作更像是移動而不是複制。 如果傳輸不成功,則不會刪除源文件。 我們需要使用的選項是--remove-source-files 。
rsync -av --remove-source-files /home/dave/geocoder /run/mount/drive2

 請注意,即使沒有傳輸文件,也可以刪除文件。 那是因為如果rsync檢查,並且所有文件都已經在目標目錄中並且rsync沒有什麼可做的, rsync認為傳輸成功。
 此外, rsync僅從源目錄中刪除文件。 它不會刪除源目錄或任何子目錄,只刪除其中的文件。 我們可以通過在源目錄上使用-R (遞歸)選項和ls來看到這一點。
ls -R 地理編碼器

7. 將文件複製到遠程計算機
要將文件夾與遠程計算機同步,必須在兩台計算機上都安裝rsync 。 在嘗試使用rsync連接到遠程計算機之前,請在兩台計算機之間設置 SSH 通信。 
您需要能夠以遠程計算機上的普通用戶身份遠程登錄, rsync才能工作。 無論您是否使用 ID 和密碼登錄,或者您是否設置了 SSH 密鑰以實現安全無密碼訪問,但如果您無法以用戶身份登錄,則rsync將不起作用任何一個。
 如果您使用密碼登錄, rsync會提示您輸入密碼。 如果你使用 SSH 密鑰登錄,在這個過程中是無縫的。
 您唯一需要做的額外事情是將遠程計算機的用戶帳戶名稱和 IP 地址添加到目標文件路徑的開頭。 使用 at 符號“ @ ”將用戶名與計算機名或 IP 地址分開,使用冒號“ : ”將計算機名或 IP 地址與目錄路徑分開。
在我們的測試網絡上,這兩個命令是等價的。
rsync -av /home/dave/geocoder [email protected]:/home/dave/Downloads
rsync -av /home/dave/geocoder [email protected]:/home/dave/Downloads

我們得到的信息與我們在本地複製文件時得到的信息相同。
8. 包含或排除文件或目錄
您可能在源目錄中有不想複製到目標計算機的文件和目錄。 您可以使用--exclude選項排除它們。 以類似的方式,您可以選擇使用--include選項包含特定文件和目錄。
 奇怪的是,如果您單獨使用--include選項,所有文件都會像往常一樣被複製——包括您特別包含的文件。 要僅複製包含的文件,您必須--exclude其他所有內容。
 您可以在命令中使用盡可能多的--include和--exclude選項,但請確保將--exclude --include之前。 此外,請確保您的源文件路徑上有一個尾部正斜杠。
此命令僅將 C 源代碼文件和 CSV 數據文件複製到目標計算機。
 rsync -av --include="*.c" --include="*.csv" --exclude="*" /home/dave/geocoder/ /run/mount/drive2/geocoder 
唯一複制的文件是我們特別包含的文件。
9. 壓縮傳輸中的文件
-z (壓縮)選項使rsync壓縮傳輸的文件。 但是,它們不會作為壓縮文件存儲在目標計算機上,它們僅在傳輸過程中被壓縮。 這可以加快長時間的傳輸。
rsync -avz /home/dave/geocoder /run/mount/drive2

10. 監控進度
說到冗長的轉賬,我們可以添加一些統計數據,這樣我們就可以看到轉賬的進度。
 -P (partial, progress) 選項實際上增加了兩個選項, --partial和--progress 。 --partial選項告訴rsync在傳輸失敗時保留部分傳輸的文件。 這樣可以節省重新開始傳輸的時間。
 --progress選項為每個文件打印傳輸的數據(以字節為單位)和百分比、傳輸速度、所用時間、正在傳輸的文件數量以及剩余文件的數量。
rsync -aP /home/dave/geocoder /run/mount/drive2

 輸出很快滾動過去,很難閱讀。 您可以通過從命令中刪除-v (詳細)選項來稍微改進一下。 即便如此,它仍然難以閱讀,因為它呼嘯而過。 

監控整體傳輸的進度通常更有用。 您可以使用 –info 選項執行此操作,並將其作為參數傳遞“progress2”。
同步 -a --info=progress2 /home/dave/geocoder /run/mount/drive2

這給出了一個實際有用的進度報告。
就像類固醇上的cp
 rsync命令快速、靈活,值得您花時間熟悉它。 帶有-av選項、源目錄和目標目錄的rsync命令的基本形式一點也不難記住。
對於許多用例,這就是您所需要的。 對此感到滿意,其餘的就很容易了。
相關:使用 Rsync 同步數據的非初學者指南


