2014-10-28 63 views
1

我在bash腳本中使用7z命令來創建一個用於備份目的的7z存檔。我的腳本也會檢查這個新創建的7z存檔是否存在於我的備份文件夾中,如果存在,我將運行md5sum以查看內容是否有所不同。所以如果檔案文件還沒有退出,或者md5sum與以前不同,我將它複製到我的備份文件夾。所以我嘗試了一個簡單的示例來測試腳本,但問題是我有時會爲我壓縮的同一文件夾獲取不同的md5sum。爲什麼?有沒有其他可靠的方法來檢查文件內容是否有所不同?命令很簡單:爲什麼7z創建不同的文件?

SourceFolder="/home/user/Documents/" 
for file in $SourceFolder* 
do 
    localfile=${file##*/} 
    7z a -t7z "$SourceFolder${localfile}.7z" "$file" 
    md5value=`md5sum "$SourceFolder${localfile}.7z"|cut -d ' ' -f 1` 

... copyinf文件去從這裏開始......

+1

這是一個在Windows下運行的Linux模擬器嗎?如果是這樣,windows可能會以某種方式修改'Documents'的內容,以便使md5sum返回不同的校驗和。 – 2014-10-28 07:33:40

+0

請使用'fullcode'標記而不是''' – 2014-10-28 08:04:59

+1

也許7z在存檔中包含時間戳(創建時間戳?)。將它們與'cmp -l 1.7z 2.7z'比較,看看有多少個字節是不同的。 – glglgl 2014-10-28 09:12:48

回答

1

可靠的方法來檢查,如果兩個不同的無損壓縮的文件具有相同的內容來展開其內容和比較這些(例如使用md5sum)。無論您使用哪種壓縮方案,比較壓縮文件遲早會結束。

+0

我同意,但與7z我壓縮整個文件夾,並且它聽起來不方便比較其整個樹結構中的文件。也許我可以以某種方式做到這一點,遞歸,但我怎麼沒有想法如何,但。我可以使用其他一些等效物來獲得相同的結果嗎?我可以在不壓縮的情況下創建tar歸檔文件,並將它們的md5sum與舊備份tar文件的md5sum進行比較,這樣可以嗎? tar是否總是創建一個具有相同md5sum的文件(假設我正在歸檔相同的內容並且不使用「z」開關)? – arcull 2014-10-28 21:10:57

+0

@arcull:'tar'值得嘗試,當然。隨着時間的推移,更改的可能性會大大降低,而對我的系統進行的快速測試顯示,兩次對相同目錄執行tar操作,可在兩個tar輸出文件上提供相同的'md5sum'。試一試。 :) – 2014-10-29 02:22:51

0

我已經部分解決了這個問題。如果您指定要壓縮的文件夾的完整路徑,它看起來很重要。結果文件不一樣。 。這會同時影響7z和焦油。我的意思是這樣的: value1=$(tar -c /tmp/at-spi2/|md5sum|cut -d ' ' -f 1) value2=$(tar -c at-spi2/|md5sum|cut -d ' ' -f 1)

所以顯然我做錯了。是否有一個7z和焦油的開關,可以消除絕對路徑?

相關問題