Mount
如何同步兩個目錄?
我想使用 crontab 在我的 linux 分區和 windows 分區之間同步兩個目錄,如下所示:
24 9 * * * cp -r /home/fan/Data /media/T/Data
但它會在原始數據目錄中創建一個名為 Data 的目錄,而不是從源目錄中複製失去的文件。我在 cp 手冊中找不到合適的選項來完美解決這個問題。如何將失去的文件(它們確實存在於目標目錄中)從 src 複製到 dir。
順便說一句,似乎需要掛載T盤才能執行複制命令,當我需要執行命令時如何自動掛載磁碟(掛載命令應該以root身份執行)。
如果命令有異常,我怎樣才能得到錯誤消息?
用於同步數據的工具是
rsync
. 您可以在目錄級別同步,也可以只同步目錄的內容,如下所示:例子
目錄同步
24 9 * * * rsync -a /home/fan/Data /media/T/
內容同步
24 9 * * * rsync -a /home/fan/Data/ /media/T/Data/
第一個範例將目錄
Data
從目錄同步/home/fan
到目錄/media/T
。第二個範例將同步Data
目錄的內容/media/T/Data
。作為附加提示,我將使用此表示法同步到目標目錄:
24 9 * * * rsync -a /home/fan/Data/ /media/T/Data/.
/.
在閱讀我的rsync
命令時,我發現更明顯。行為範例
使用
rsync
可能是我在培訓新使用者時處理的最困惑的問題之一。樣本數據:
$ tree home/fan/Data/ home/fan/Data/ |-- file1 |-- file2 |-- file3 |-- file4 `-- file5
1.同步目錄數據內容
$ rsync -a home/fan/Data/ media/T/
請注意,我們將 的內容
Data
放入T
.$ tree media/T/ media/T/ |-- file1 |-- file2 |-- file3 |-- file4 `-- file5 0 directories, 5 files
2.同步目錄
$ rsync -a home/fan/Data media/T/
請注意,我們將目錄
Data
放入T
.$ tree media/T/ media/T/ `-- Data |-- file1 |-- file2 |-- file3 |-- file4 `-- file5 1 directory, 5 files
使用
rsync
:24 9 * * * rsync -a /home/fan/Data/ /media/T/Data
/
在源目錄名稱的末尾添加額外內容將告訴rsync
複製內容而不是完整目錄。rsync
還將避免複製具有相同時間戳/大小的文件(即在 99.99% 的情況下不需要複製的文件)。如果您在同一系統上同步文件,還可以考慮使用
--inplace
選項rsync
來加快速度。從手冊頁:--inplace This option changes how rsync transfers a file when its data needs to be updated: instead of the default method of creating a new copy of the file and moving it into place when it is complete, rsync instead writes the updated data directly to the destination file.
這個選項雖然有利也有弊,但最大的缺點可能是如果同步中斷,目標文件將處於不一致狀態,只能通過重新開始來修復。