我想删除分散在文件夹中的不同名称的相同文件。该命令可以很好地搜索和列出文件。然后我手动删除这些文件。
是否可以在以下命令中添加删除选项?
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
另外,添加-n1
(xargs
删除rm
)以使其打印传递给它的参数(用于验证目的)。
find . -type f -exec md5sum {} + | awk '$1 == "d41d8cd98f00b204e9800998ecf8427e" {printf "%s\0", substr($0, 35)}' | xargs -r0 rm
注意这个方法做处理文件名和/或文件夹中的空格。
匹配多个 MD5 哈希值
- 创建一个文本文件,其中包含要搜索的哈希值,每行一个,例如
hashes.txt
awk '{printf "%s%s", NR-1 ? "|" : "", $1}' hashes.txt
会将其重新格式化为一行管道|
分隔的哈希值。- 使用原始命令的这个变体,使用正则表达式而不是精确的字符串匹配来匹配哈希值:
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
- 在上面的步骤 3 中,删除
-n1
并替换为rm
或rm -f
以实际执行文件删除。