2012-06-18 56 views
9

在Linux Mint 12中使用Gnome,我從一個NTFS閃存驅動器複製了一個大約9.7 GB的文件夾(包含一個複雜的子文件夾樹)到另一個NTFS閃存驅動器。根據Gnome文件計數匹配,但根據du(和其他程序)字節計數不匹配。 (我在其他Linux發行版和Windows XP中複製文件夾時遇到同樣的問題。)比較2文件夾和查找具有不同字節數的文件

我只想知道哪些文件沒有匹配的字節數。 (我不想比較每個文件的內容,因爲這會花費太長時間。)找到字節數不匹配文件的最好,最簡單和最快的方法是什麼?

+0

一個班輪解決方案找到了相關的Unix StackExchange問​​題:http://unix.stackexchange.com/q/62140 – tanius

回答

3

假設你需要比較DIR1和dir 2,這裏是控制檯命令:

cd dir1 
find . -type f|sort|xargs ls -l| awk '{print $5,$8}' > ~/dir1.txt 
cd dir2 
find . -type f|sort|xargs ls -l| awk '{print $5,$8}' > ~/dir2.txt 
diff ~/dir1.txt ~/dir2.txt 

您可能需要編輯AWK參數,使其打印文件長度和路徑正確。

6

您是否檢查兩個分區是否具有相同的屬性? (塊大小,大小,刪除或壞塊保留空間等)

對於您的具體情況,我會建議使用-n(或--dry-run)選項rsync。它會告訴你哪些文件是不同的。那就是:

$ rsync -I -n /source/ /target/ 

選項-I是忽略倍。您可以使用相同的命令使兩個目錄等效(時間戳,權限等)。

檢查的rsync或手動嘗試選項--help獲得關於如何使用它更多選項和示例。它非常強大。

10

我會修改@ user1464130的答案,因爲它在處理文件名中的空格時遇到問題。

cd dir1 
find . -type f -printf "%p %s\n" | sort > ~/dir1.txt 
cd dir2 
find . -type f -printf "%p %s\n" | sort > ~/dir2.txt 
diff ~/dir1.txt ~/dir2.txt 

如果你想對每個文件啓動命令,並在報告中使用的結果,你可以使用while猛砸結構。本示例使用md5sum來計算每個文件的校驗和。

find . -maxdepth 1 -type f -printf "%p %s\n" | while read path size; do echo "$path - $(md5sum $path | tr -s " " | cut -f 1 -d " ") - $size" ; done 

每個$()單獨執行,並允許我們計算每個文件的校驗和。使用tr將每個連續的空格壓縮到一個空格中,並且cut從第一個位置提取第n個位置中的單詞。如果我們不這樣做,我們會得到文件的名稱兩次,因爲md5sum會在標準輸出上返回。

這裏是一個沒有使用比較的例子(no diff)。請注意,我使用破折號-強調了我們輸出的每個文件的三個數據,但如果您想將其提供給另一個程序,則可能會出現問題。

$ find . -maxdepth 1 -name "*.c" -type f -printf "%p %s\n" | while read path size; do echo "$path - $(md5sum $path | tr -s " " | cut -f 1 -d " ") - $size" ; done 
./thread.c - 5f2b7b12c7cd12fcb9e9796078e5d15b - 584 
./utils.c - d61bc1dbc72768e622a04f03e3b8f7a2 - 3413 
+0

它有多難將是調整這個腳本來打印校驗和在列表中的每個文件? – mydoghasworms

+0

我編輯了我的答案以提供解決方案。我剛剛添加校驗和而沒有做差異。你想在校驗和上進行比較嗎?如果是這種情況,那麼你不需要字節計數,它與OP問題有一點不同。而且,如果我們要確保兩個文件是相同的,那麼校驗和會更好。我們甚至可以添加文件修改時間 – lkuty

+0

粗糙。非常感謝。 – mydoghasworms

相關問題