通过 md5sum 查找文件

通过 md5sum 查找文件

给定一个文件的 md5sum,我想知道目录树中是否有其他文件具有相同的 md5sum(但可能名称不同)。如何在 bash 中做到这一点?

PS:需要强调的是,这应该适用于给定目录下的整个树,即必须递归工作,而不仅仅是在当前目录中工作。

答案1

使用find递归测试所有文件:

find . -type f -exec \
bash -c 'md5sum "$0" | grep -q 2690d194b68463c5a6dd53d32ba573c7 && echo $0' {} \;

这里md5sum输出 MD5 和和文件名。您需要grep它来获取实际的 MD5 和,因为没有开关可以让它只输出和。

md5如果你使用的是 BSD 或 OS X,你可以更轻松地检查 MD5 值:

find . -type f -exec \
bash -c '[ "$(md5 -q "$0")" = 2690d194b68463c5a6dd53d32ba573c7 ] && echo $0' {} \;

答案2

其他解决方案也不错,但我想提出一个生成进程较少的解决方案,如果您有 GNU find,这个解决方案对于许多小文件来说应该会快得多:

find /path/to/tree -type f -exec md5sum \{\} + | sed -nre 's/^md5-to-search-for  //p'

或者不使用 GNU find:

find /path/to/tree -type f -print0 | xargs -r -0 -- md5sum | sed -nre 's/^md5-to-search-for  //p'

答案3

借鉴 slhck 的一些解决方案,我得出了

find . -type f -print0 | while read -r -d '' f;
do
 md5sum "$f" | grep "$1"
done

其中 $1 是第一个参数。如果要检查缺少的参数,请使用以下命令启动文件:

if [ -z "$1" ]
  then
    echo "No argument supplied"
    exit
fi

相关内容