根据MD5查找文件并删除

根据MD5查找文件并删除

我想删除分散在文件夹中的不同名称的相同文件。该命令可以很好地搜索和列出文件。然后我手动删除这些文件。

是否可以在以下命令中添加删除选项?

find /folder -type f -exec md5sum {} + | grep '^aafa26a6610d357d8e42f44bc7e76635'

答案1

尝试

find ... | awk '{$1 = "rm" ; print } ' | bash

aaf...这将用 rm替换实际的 md5sum ( )。

rm如果文件名中有特殊字符,或者文件被写保护(替换为rm -f),则此操作将不起作用。

答案2

另一种可能性如下。如果需要,请替换rm为。rm -f另外,添加-n1xargs删除rm)以使其打印传递给它的参数(用于验证目的)。

find . -type f -exec md5sum {} + | awk '$1 == "d41d8cd98f00b204e9800998ecf8427e" {printf "%s\0", substr($0, 35)}' | xargs -r0 rm

注意这个方法处理文件名和/或文件夹中的空格。

匹配多个 MD5 哈希值

  1. 创建一个文本文件,其中包含要搜索的哈希值,每行一个,例如hashes.txt
  2. awk '{printf "%s%s", NR-1 ? "|" : "", $1}' hashes.txt会将其重新格式化为一行管道|分隔的哈希值。
  3. 使用原始命令的这个变体,使用正则表达式而不是精确的字符串匹配来匹配哈希值:find . -type f -exec md5sum {} + | awk '$1 ~ "^('$(awk '{printf "%s%s", NR-1 ? "|" : "", $1}' hashes.txt)')$" {printf "%s\0", substr($0, 35)}' | xargs -r0 -n1
  4. 在上面的步骤 3 中,删除-n1并替换为rmrm -f以实际执行文件删除。

相关内容