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

我正在尝试使用 md5sum 删除在某个目录中具有完全相同内容的文件,以放入我的 bash 文件的末尾。上面的代码是我在尝试研究 md5sum 时遇到的,但它是针对 uniq 的,我正在使用小狗软件。另外我对 linux 很陌生,所以我可能错过了那行代码中的一些东西。

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

4

2 回答 2

4

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

于 2013-11-12T17:38:33.963 回答
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 的文件(您从nbHash数组中获得此信息),如果是,则 rm 文件.

于 2013-11-12T19:00:06.443 回答