2013-03-16 106 views
3

我需要你的幫助!我會盡量做到儘可能具體。刪除和複製文件[BASH]

場景:我在Linux發行版上安裝了一個MOUNTED映像。我將這個裝入的Distro中的所有文件複製到我的Linux系統上名爲「raw」的文件夾中(在Files ... so Files/Raw的子目錄中)。我在該Raw文件夾中的所有文件的文本文件中創建了HASH列表(MD5使用md5sum)。我重複數據刪除(擺脫多餘的哈希)這個散列表到一個新的文本文件,名爲「UniqueHashes.txt」

任務:基本上我現在需要做的是要經過整個原始文件夾,複製每個具有匹配的MD5散列的文件添加到UniqueHashes.txt中的散列之一。

我在想的是:使用find循環RAW。 -type f,然後散列每個文件,並將該散列與我創建的唯一散列表中的每一行進行比較。如果它存在於唯一哈希列表中,則將該文件(保留時間戳)複製到DD中,否則忽略該文件。

它需要在BASH中。非常感謝您的幫助。我不希望你把代碼中的答案交給我,但是如果你這樣做,那就太棒了。然而,任何指導你可以給我解決這個問題將是驚人的!

在此先感謝!

回答

3

使用fdupes,從你的包管理器一個極好的第三方工具:

fdupes -d -r files/raw 

會提示你要保留,每個組相同的文件重複文件。

其他選項包括

fdupes -d -r -N files/raw 

自動保持一個隨機,或

fdupes -L -r files/raw 

硬鏈接的重複,使目錄中出現的相同,只是用較少的空間。

+1

根據該男子頁,'fdupes -d -r -N文件/ raw'要做到一樣用yes命令第二個例子中的管道。 – pendor 2013-11-05 14:54:40

0
(
IFS=$(echo -en "\n\b") 
for file in $(find -printf '%P\n'); do 
    if [ -f $file ]; then 
    md5=$(md5sum $file | cut -d' ' -f1) 
    if grep $md5 Unique # && test ! -f $dest 
    then 
     # copy source dest 
    fi 
    else 
    # create a directory at the dest? 
    fi 
done 
) 
+0

非常感謝您的幫助!我會對它進行測試並讓你知道結果。順便說一句,#&&測試是什麼! -f $ dest所有關於?再次感謝! – user2175914 2013-03-17 19:14:24

+0

我評論說,但它會檢查是否有其中一個模仿者已被複制到目的地。你需要一個類似的測試,但不使用我認爲的文件名。 – perreal 2013-03-17 21:45:30

+0

我一直收到這個: md5sum:AHCache:是一個目錄 然後它停在那裏。 – user2175914 2013-03-17 23:27:27