在Bash中重新编写和复制文件?

时间:2013-03-16 00:34:58

标签: bash hash copying

我需要你的帮助!我会尝试尽可能具体。

场景:我在Linux发行版上有一个MOUNTED图像。我将这个已挂载的Distro中的所有文件复制到我的Linux系统上名为“raw”的文件夹中(在Files ... so Files / Raw的子目录中)。我在此Raw文件夹中的所有文件的文本文件中创建了一个HASH LIST(MD5使用md5sum)。我将这个HASH LIST删除(删除冗余哈希)到一个名为“UniqueHashes.txt”的新文本文件中

任务:基本上我现在需要做的是遍历整个Raw文件夹并将具有匹配MD5哈希的EACH文件复制到UniqueHashes.txt中的一个哈希值。 / p>

我在想的是:使用find循环使用RAW。 -type f,然后对每个文件进行散列,并将该散列值与我创建的唯一散列列表中的每一行进行比较。如果它存在于唯一哈希列表中,则将该文件(保留时间戳)复制到DD中,否则忽略该文件。

它需要在BASH中。非常感谢您的帮助。我不希望你在代码中给我答案,但如果你这样做,那就太棒了。但是,你可以给我解决这个问题的任何指导都会很棒!!!

提前致谢!

2 个答案:

答案 0 :(得分:3)

使用fdupes,这是您的软件包管理器提供的一个漂亮的第三方工具:

fdupes -d -r files/raw
对于每组相同的文件,

将提示您要保留哪些重复文件。

其他选项包括

fdupes -d -r -N files/raw 

自动保留一个随机的,或

fdupes -L -r files/raw

到硬链接重复,使目录显示相同,只使用更少的空间。

答案 1 :(得分: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
)