2011-10-27 30 views
13

我有很多的文件從一個側面(A)和其他地方的許多其他文件(B)覆蓋文件內容是否對他們的不一樣

我複製A到B ,有很多文件是相同的,但內容可能會不同!

一般我用MC(午夜指揮官)做,和選定的「覆蓋如果不同尺寸的」。 但是,在尺寸相同的情況下,內容不同。在這種情況下,mc將文件保存在B位置,而不是覆蓋它。

在MC覆蓋對話框有一個工作「更新」,我不知道它在做什麼?在幫助中沒有這樣的信息,也許這是一個解決方案?

所以我在尋找解決方案,它可以幫助我的所有文件從複製到B和覆蓋文件在B座,如果他們存在並且內容是從A

如果「B」的地方文件存在不同(同名)並且內容不同,它必須每次都由「A」位置的文件覆蓋。

你知道任何解決方案嗎?

+0

順便說一句,所有文件都是純文本文件 – user1016265

回答

17

你有沒有嘗試過的命令行:

cp -ru A/* B/ 

應該遞歸從目錄中的所有修改過的文件(最近的時間戳)複製到目錄B.

您還可以使用-a代替-r在命令行,取決於你想要做什麼。請參閱cp手冊頁。

+1

似乎這就是我需要 -u意味着只有當源文件比目標文件更新時或目標文件丟失 複製,但什麼是時間戳尋找 ?記錄時間 ?真的不是理想的解決方案,但現在可能是最簡單的,謝謝。 – user1016265

0

你可能要保持某種保存文件,當你寫他們,你創造出的SHA-1散列「索引」的文件。然後,您可以計算「源」哈希值並將其與索引文件中的「目標」哈希值進行比較。如果這個過程是文件寫入目的地的唯一方式,這將僅適用。

+0

你知道任何可以做類似的軟件嗎? 1.爲源文件樹做散列。 2.爲目標文件樹製作散列。 3.比較它並只複製已更改的文件。 r ight? – user1016265

+0

不是手,不,但它聽起來像是一個有趣的事情,用openssl庫編寫自己:) – trojanfoe

9

我會用rsync,因爲這將不依賴於文件日期,但實際上檢查文件的內容是否已經改變。例如:

#> rsync -cr <directory to copy FROM> <directory to copy TO> 

Rsync的副本文件向或從遠程主機,或局部地在當前主機上(它不支持兩個遠程主機之間複製文件)。

-c, --checksum skip based on checksum, not mod-time & size 
-r, --recursive recurse into directories 

有關更多選項和詳細信息,請參見man rsync

+0

'-c'開關在這裏是關鍵。我想避免「修改」時間戳從文件*內容*進行更改和比較,而不僅僅是時間戳。謝謝! – aardvarkk