我发现以下命令利用 md5 文件哈希值来查找重复文件并将其列在文本文件中。
find ./ -type f -exec md5 {} \; | awk -F '=' '{print $2 "\t" $1}' | sort | tee duplicates.txt
但是,由于列出了每个具有相同哈希值的文件,我无法使用以下命令删除重复的文件,因为文本文件的每一行(包括原始行)都将被删除。
while read file; do rm "$file"; done < duplicates.txt
有没有办法删除 duplicates.txt 文件中除第一个文件之外的所有具有重复 md5 哈希值的文件?
答案1
fdupes
可能是您的解决方案。它可以通过以下方式安装自制和
brew install fdupes
如果你没有 homebrew,你可以使用以下命令安装 homebrew
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
您可以使用该-d
选项来提示保留哪些文件(删除所有其他文件),并且该-N
选项会在没有提示的情况下删除除第一个文件之外的所有文件。-r
递归搜索指定的目录。
因此,fdupes -rdN <directory>
应该删除每组重复项中除第一个之外的所有内容。当然,在未经提示的情况下删除时要小心。如果文件很重要,也许可以先复制目录。
很抱歉建议使用第三方工具;我通常会尝试找到一种无需额外软件就能完成任务的方法,但 fdupes 是我所知道的唯一方法。我会想办法使用您的 md5 列表来实现相同的目的。