概述
`rsync` 的排除功能在複雜的檔案同步場景中至關重要。通過從同步目標中排除特定的日誌檔案、臨時檔案、版本控制系統元數據(.git, .svn)等,可以縮短傳輸時間、節省目標空間並避免複製不必要的數據。
主要特點
`rsync` 排除功能提供的核心特點。
- **基於模式排除**:可以使用萬用字元(glob)模式,根據檔案名或路徑進行排除。
- **基於檔案列表排除**:可以將要排除的模式寫在單獨的檔案中進行管理。
- **靈活的規則應用**:可以與 `--include` 選項結合,定義複雜的包含/排除規則。
- **性能優化**:通過減少不必要的檔案傳輸來提高同步速度。
主要選項
在 `rsync` 命令中用於排除檔案和目錄的核心選項。
指定排除規則
其他有用選項
生成的命令:
請試著組合命令。
這個 Django 應用程序是一個技術指南文檔,旨在為用戶輕鬆解釋 Linux 的各種命令。
`rsync-exclude` 執行命令。
請將上述選項組合在一起,與 AI 一同虛擬執行命令。
使用範例
使用 `rsync` 的排除選項的實際範例。
排除特定檔案擴展名
rsync -av --exclude='*.log' --exclude='*.tmp' /path/to/source/ /path/to/destination/
從來源目錄排除 `.log` 和 `.tmp` 檔案,並將其同步到目標目錄。
排除特定目錄
rsync -av --exclude='node_modules/' --exclude='.git/' /path/to/source/ /path/to/destination/
從來源目錄排除 `node_modules` 和 `.git` 目錄,並進行同步。
使用排除列表檔案
rsync -av --exclude-from=exclude_list.txt /path/to/source/ /path/to/destination/
使用 `exclude_list.txt` 檔案中定義的模式來排除同步目標。 **exclude_list.txt 內容範例:** ``` *.bak /temp_files/ logs/ ```
僅包含特定檔案並排除其餘檔案
rsync -av --include='*.conf' --exclude='*' /path/to/source/ /path/to/destination/
預設排除所有檔案,僅包含擴展名為 `.conf` 的檔案進行同步。`--include` 和 `--exclude` 的順序很重要。
同步到遠端伺服器時排除特定檔案
rsync -avz --exclude='.DS_Store' --exclude='cache/' /path/to/local/user@remote_host:/path/to/remote/
將本地目錄的內容同步到遠端伺服器,同時排除 `.DS_Store` 檔案和 `cache/` 目錄。
提示與注意事項
有效使用 `rsync` 的排除選項並避免潛在問題的提示和注意事項。
理解模式匹配規則
排除模式根據 `rsync` 的篩選規則工作。
- **萬用字元**:`*` 匹配任何字串,`?` 匹配單一字元。`**` 匹配跨越目錄邊界。
- **路徑**:如果模式以 `/` 開頭,則相對於來源目錄的根。如果以 `/` 結尾,則僅匹配目錄。
- **相對路徑**:如果模式不包含 `/`,則在所有目錄層級都匹配。例如:`--exclude='temp'` 會排除 `/path/to/source/temp` 和 `/path/to/source/subdir/temp`。
選項順序的重要性
`--include` 和 `--exclude` 選項按照它們在命令列中出現的順序進行處理。因此,如果您想包含特定檔案並排除其餘檔案,則應先使用 `--include`,然後再使用 `--exclude='*'`。
- `--include='*.txt' --exclude='*'` (包含所有 `.txt` 檔案,排除其餘檔案)
- `--exclude='*' --include='*.txt'` (排除所有檔案,`.txt` 檔案也會被排除 - 意外結果)
利用測試執行(`--dry-run`)
在實際同步重要數據之前,請務必使用 `-n` 或 `--dry-run` 選項檢查預期的行為。這對於防止意外排除或包含檔案非常有效。
- `rsync -avn --exclude='*.log' /path/to/source/ /path/to/destination/`
使用 `-vv` 選項進行調試
當排除規則不如預期時,添加 `-vv` (verbose) 選項可以讓 `rsync` 輸出詳細資訊,說明哪些檔案被跳過以及是根據哪個規則排除的,這有助於調試。
- `rsync -avv --exclude='*.bak' /path/to/source/ /path/to/destination/`