我有一個相當大的目錄,出於備份和便攜性的原因,我需要將其同步到外部硬碟。
/work
我嘗試運行以下 rsync 命令以便將此資料夾複製到我的外部硬碟:
rsync -avz /work /media/extern_drive --max-size '4G'
這似乎工作正常,除了它不複製任何帶有 a 的文件:
。
這篇文章給出了單一文件的解決方案: rsync:檔案名稱中的冒號,但問題是我有很多這些文件分散在不同的目錄中,我無法手動完成。
有沒有辦法遞歸地同步檔案名稱中帶有冒號的任何檔案?
答案1
我推測您的外部磁碟機使用 VFAT 等檔案系統,該系統不允許檔案名稱中包含冒號。
一個簡單的選擇是將檔案備份為存檔(zip
、7z
、tar.xz
,無論您喜歡什麼)。這樣,除了最大檔案大小之外,您就不會受到檔案系統任何特徵的限制。
另一種可能性是使用rdiff 備份,它負責翻譯不適合目標檔案系統的檔案名,如建議經過池利。
處理不支援的字元的通用方法是利用檔案系統層來轉換檔案名稱。這保險絲檔案系統波西紹夫爾將檔案名稱轉換為 Windows VFAT 支援的名稱。
mkdir ~/mnt
mount.posixovl -S /media/extern_drive ~/mnt
rsync -a /work ~/mnt
fusermount -u ~/mnt
看當我在 USB 隨身碟上進行 rsync 時,如何替換冒號?了解更多詳細信息,並檢查該線程以獲取可能出現的任何新解決方案。
答案2
我會嘗試明確地包含名稱中帶有冒號的文件模式,如下所示:
$ rsync -avz --include '*:*' /work /media/extern_drive --max-size '4G'
例子
$ mkdir 1 2
$ touch 1/file{1..5}
$ touch 1/file:{1..5}
明確排除它們
$ rsync -avz --exclude '*:*' 1/ 2/
sending incremental file list
./
file1
file2
file3
file4
file5
sent 313 bytes received 114 bytes 854.00 bytes/sec
total size is 0 speedup is 0.00
明確包括它們
$ rm -fr 2/*
$ rsync -avz --include '*:*' 1/ 2/
sending incremental file list
./
file1
file2
file3
file4
file5
file:1
file:2
file:3
file:4
file:5
sent 573 bytes received 209 bytes 1,564.00 bytes/sec
total size is 0 speedup is 0.00