2014-01-10 61 views
2

我爲我的文件使用Python備份腳本,並從硬盤備份到與我的PC分離的筆式驅動器以及永久連接的外部驅動器。Python - 文件修改時間比較,奇怪的行爲

我在我的腳本中有一個邏輯,它只在源文件較新的情況下從源文件複製到目標文件。

如果目標文件較新,我只是報告一個錯誤,不要做任何複製。

這適用於永久連接的外部驅動器。但對於筆驅動器來說,對於大多數文件來說,目標文件被報告爲比源文件更新。

我只使用我的筆式驅動器進行備份,而不使用其他任何設備。所以它是不可能爲筆驅動器上的文件更新。

可能是什麼問題?

謝謝 Vishy

+1

您必須向我們顯示輸出結果,顯示文件的日期。 'ls'或者另一個命令來知道發生了什麼 – Lucio

+0

它可能與Python無關(您的筆式驅動器可能很時髦),或者可能是因爲您錯誤地使用了某個Python模塊並且出現意外行爲。請發佈代碼,以便我們可以幫助您弄清楚哪些。 – Keeler

+0

你在Windows嗎? –

回答

0

你可能會遇到一個問題,在不同的文件系統類型不同的時間戳。既然你在這些信息上發佈了很少的信息,我必須大膽猜測。

我正在考慮的機制是這樣的:A型

您的原始文件系統(例如EXT3FS,ReiserFS文件系統,NTFS,...)可能包含具有毫秒的精度每個文件的時間戳。備份文件系統(例如fat32,...)對於時間戳可能具有不同的精確度(例如僅僅秒)。在創建備份的過程中,系統必須決定如何處理。毫秒信息必須丟失,並且值可能變爲四捨五入,因此12:23:34.789可能會四捨五入爲12:23:35。 (這當然應該適用於大約50%的文件。)

比較文件時間(取決於例程的聰明程度),此結果可能被解釋爲「備份比原始文件更新」。

正如我所說,這只是一個瘋狂的猜測,所以你應該看看具體的時間戳找出。

0

最可能的原因是:

  • 您的電腦的硬盤驅動器使用NTFS。
  • 您的筆式驅動器使用FAT。
  • 文件X的最後一次備份在從夏令時切換到正常時間之前。
  • 您正在正常運行下一次備份。

由於only NTFS is DST-aware,這意味着突然您的筆驅動器上的文件比硬盤驅動器上的文件早一個小時。

因此,您應該檢查(並忽略)恰好一小時的時間戳差異,或(更好)在NTFS中格式化您的筆式驅動器。

畢竟,它可能有一個文件,該文件在桌面上比你的筆式驅動器上的更新,你的程序將無法通過不到一個小時備份如果修改日期不同,修改前發生開關 DST,並且您正在運行之後的備份...