使用md5sum删除相同的重复文件

时间:2013-11-12 17:36:23

标签: linux

find -type f -exec md5sum '{}' ';' | uniq --all-repeated=separate -w 33 | cut -c 35-

我正在尝试使用md5sum删除在某个目录中具有完全相同内容的文件,以便放入我的bash文件的末尾。我在尝试研究md5sum时遇到的代码,但它是针对uniq而我正在使用的是petware。另外我对linux很新,所以我可能错过了那段代码。

编辑:有没有其他方法可以获取唯一文件?

2 个答案:

答案 0 :(得分:4)

你可以使用fdupes(sudo apt-get install fdupes) 它完成所有工作。

答案 1 :(得分:1)

这些方面的东西(未经测试):

#!/bin/bash

shopt -s globstar nullglob
shopt -u failglob

declare -A files=()
declare -A nbHash=()

for f in **; do
    [[ -f "$f" ]] || continue
    md5sum=$(md5sum -- "$f")
    files[$f]=$md5sum
    ((nbHash[$md5sum]+=1))
done

for f in "${!files[@]}"; do
    if ((nbHash[${files[$f]}]-->1)); then
        rm -- "$f"
    fi
done

制作2个关联数组:

  • files:键是文件名,值是md5sum
  • nbHash:键是md5sum,值是md5sum的文件数

完成这些关联数组后,循环遍历文件(即通过数组files的键),并确定是否有多个文件具有相同的md5sum(您可以从{{获得此信息) 1}}数组),如果是,则rm文件。