Rsync同步文件時如何排除文件

請關注本頭條號,每天堅持更新原創乾貨技術文章。
如需學習視頻,請在微信搜索公眾號“智傳網優”直接開始自助視頻學習

1. 前言

本文主要講解使用Rsync同步文件時如何排除指定文件夾或多個目錄。

Rsync是一個快速且通用的命令行實用程序,可以在遠程shell上的兩個服務器之間同步文件或者文件夾。

Rsync同步文件時如何排除文件

Rsync同步文件時如何排除指定文件夾或多個目錄

使用Rsync,您可以鏡像數據、創建增量備份並在系統之間複製或同步文件。在複製或同步數據時,您可能希望指定一個或多個文件或目錄的名稱或位置來排除它們。

在本教程中,我們將向您展示如何使用rsync排除指定文件、指定目錄、多個目錄。

2. 實施前的準備工具

在Rsync同步文件時如何排除指定文件夾或多個目錄?需要提前做以下準備

您應該對rsync的工作原理有一個基本的瞭解。

在下面的示例中,我們將使用rsync和-a選項。這告訴rsync遞歸地同步目錄,傳輸特殊和塊設備,並保存符號鏈接、修改時間、組、所有權和權限。

當排除文件或目錄時,需要使用它們到源目錄的相對路徑。

有兩個選項可以指定要排除的文件和目錄:

在命令行中,使用--exclude選項。

從文件中使用--exclude-from選項。

3. Rsync同步文件時排除指定文件

要排除特定文件,請將文件的相對路徑傳遞給--exclude選項。

Rsync同步文件時如何排除文件

Rsync同步文件時排除指定文件

在下面的例子中,文件src_directory/file.txt不會被傳輸:

rsync -a --exclude 'file.txt' src_directory/ dst_directory/

4. Rsync同步文件時排除指定文件夾或目錄

排除特定目錄與排除文件相同,只需將目錄的相對路徑傳遞給--exclude選項,如下圖所示:

rsync -a --exclude 'dir1' src_directory/ dst_directory/
Rsync同步文件時如何排除文件

Rsync同步文件時排除指定文件夾或目錄

如果你想排除目錄內容,但不是目錄本身,請使用dir1/*代替dir1:

rsync -a --exclude 'dir1/*' src_directory/ dst_directory/

5. Rsync排除多個文件或目錄

要排除多個文件或目錄,只需指定多個--exclude選項:

rsync -a --exclude 'file1.txt' --exclude 'dir1/*' --exclude 'dir2' src_directory/ dst_directory/

如果您喜歡使用--exclude選項,您可以用括號{}列出您想要排除的文件和目錄,中間用逗號隔開,如下所示:

排除file1.txt,排除目錄dir/*,排除目錄dir2

rsync -a --exclude={'file1.txt','dir1/*','dir2'} src_directory/ dst_directory/

如果要排除的文件或者目錄的數量很大,可以在一個文件中指定要排除的文件和目錄,並將文件傳遞給exclude-from選項,而不是使用多個--exclude選項。

下面的命令與上面的命令完全相同:

rsync -a --exclude-from='exclude-file.txt' src_directory/ dst_directory/

編輯exclude-file.txt文件

vi exclude-file.txt

加入以下內容,指定要排除的多個文件或者多個文件夾或者目錄:

file1.txt
dir1/*
dir2

6. 基於一個模式排除多個文件或目錄

Rsync同步文件時如何排除文件

基於一個模式排除多個文件或目錄

使用rsync,您還可以基於匹配文件或目錄名稱的模式排除文件和目錄。

例如,rsync要排除同步複製.jpg圖片文件執行以下命令:

rsync -a --exclude '*.jpg*' src_directory/ dst_directory/

排除除匹配特定模式的文件和目錄之外的所有其他文件和目錄要稍微複雜一些。假設您只想排除除了.jpg結尾的文件之外的所有其他文件和目錄。

一種選擇是使用以下命令:

rsync -a -m --include='*.jpg' --include='*/' --exclude='*' src_directory/ dst_directory/

當使用多個包含/排除選項時,應用第一個匹配規則。

--include='*.jpg' - 首先,我們應該包括所有的.jpg 文件。
--include='*/' - 然後我們指定包含src_directory目錄中的所有目錄。沒有這個,rsync將只複製頂層目錄中的*.jpg文件。
-m - 移除空目錄

另一個選項是通過管道將find命令的輸出傳輸到rsync:

find src_directory/ -name "*.jpg" -printf %P\\\\0\\\\n | rsync -a --files-from=- src_directory/ dst_directory/

-printf %P\\\\0\\\\n - 將從文件路徑中刪除src_directory/。


--files-from=- - 意味著只包含來自標準輸入的文件(從find命令傳遞的文件)。

7. 總結

在本教程中,您學習瞭如何在使用Rsync傳輸數據或者同步文件時排除指定文件和目錄或者多個文件多個目錄。在Rsync用戶手冊頁面上有更多關於Rsync的內容。

本文已同步至博客站,尊重原創,轉載時請在正文中附帶以下鏈接:
https://www.linuxrumen.com/rmxx/1426.html
點擊瞭解更多,快速查看更多的技術文章列表。


分享到:


相關文章: