Powershell如何通过HASH值来查找文件夹内的重复文件并删除


PowerShell交流中心分类: 变量-函数-脚本-条件-循环-参数Powershell如何通过HASH值来查找文件夹内的重复文件并删除
0
(͡·̮̃·̃) asked 6 年 ago

求大神写个,Linux下很好实现,Windows不太了解

KDurant replied 6 年 ago

$Hash=New-object System.Collections.Generic.HashSet
用这个数据结构,它是一个无重复的链表,脚本运行时把每个文件的HASH值计算后插入到这个链表,插入操作会根据插入的结果返回布尔值,如果插入失败(返回值为0)直接删除文件就行,这样做可以仅遍历一次文件。

Mooser Lee 管理员 replied 6 年 ago

正解,这样可以避免@神经元短路 中对于hash的排序。

1 Answers
1
神经元短路 answered 6 年 ago

有个cmdlet是Get-FileHash可以用来获得文件HASH值。
这个是我能想到的解法,不一定是最优的。

$all = ls -file |get-filehash |sort hash #不想做循环就偷懒了。获得当前目录的文件|获得hash值,按hash排序
$temphash=""; #用于存放上一个文件的hash
$all | #遍历比较是否与上一个文件hash相同
%{
if($temphash -eq $_.hash){
$_.path #如相同显示文件全名 可改为删除
}
$temphash = $_.hash
}

 

(͡·̮̃·̃) replied 6 年 ago

感谢大佬,我去试试。