我對 rsync 的工作感到困惑。這是我所做的和所期望的。
我建立了兩個名為「sbck」和「dbck」的資料夾。
場景一:
我創建了一個名為的文件a.txt
,並使用cp -rp a.txt aa.txt
.我將這兩個文件都放在sbck
資料夾中。接下來我做了rsync -rvch sbck/ dbck/
。這將這兩個檔案移動到 dbck 中。
問題:既然a.txt和aa.txt都是一樣的,為什麼rsync允許這樣複製呢?難道不應該只是兩者之一嗎?
場景2:
我創建了一個名為的文件a.txt
,並使用cp -rp a.txt aa.txt
.我將這兩個文件都放在sbck
資料夾中。接下來,我做到了cp -rp sbck/a.txt dbck/
。後來,我做到了rsync -rvch sbck/ dbck/
。這將 移動aa.txt
到 dbck 中。
問題:由於a.txt和aa.txt是相同的,並且我已經將a.txt移至dbck。為什麼rsync允許aa.txt複製到dbck?在這種情況下 -c 究竟如何幫助我?
答案1
我認為你誤解了它的-c
作用。rsync
無論有或沒有該選項,都不進行檔案重複資料刪除-c
。所做的只是-c
更改rsync
決定文件是否需要在目標上更新的方式。
假設sbck/a.txt
和dbck/a.txt
,然後您運行rsync -rvh sbck/ dbck/
(注意:沒有-c
選項)。作用rsync
是比較這兩個文件的大小和修改時間,如果它們匹配,它將假定文件的內容也匹配,並且不會費心複製sbck/a.txt
到dbck/a.txt
.
現在,假設你rsync -rvch sbck/ dbck/
(用-c
這個時間)跑步。這次,rsync
將計算 和 的校驗sbck/a.txt
和dbck/a.txt
,並使用這些校驗和(而不是它們的大小和修改時間)來確定檔案是否相同,因此sbck/a.txt
不需要將 的新內容複製到dbck/a.txt
。它不會將 的校驗sbck/a.txt
和與來源樹或目標樹中的任何其他檔案的校驗和進行比較。