2013-03-16 57 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