当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 如何使用 PowerShell 查找重复文件

作者:精品下载站 日期:2024-12-14 23:32:51 浏览:16 分类:玩电脑

如何使用 PowerShell 查找重复文件


对于其中一个项目,我需要一个 PowerShell 脚本来查找文件服务器的共享网络文件夹中的重复文件。 Windows 中有许多用于查找和删除重复文件的第三方工具,但大多数都是商业的或不适合自动场景。

由于文件可能具有不同的名称但内容相同,因此不应仅按名称比较文件。最好获取所有文件的哈希值并在其中找到相同的文件。

以下 PowerShell 一行命令允许您递归扫描文件夹(包括其子文件夹)并查找重复文件。在此示例中,找到了两个具有相同哈希值的相同文件:

Get-ChildItem -path C:\Share\ -Recurse | Get-FileHash | Group-Object -property hash | Where-Object { $_.count -gt 1 } | ForEach-Object { $_.group | Select-Object Path, Hash }

[玩转系统] 如何使用 PowerShell 查找重复文件

这个 PowerShell 单行代码很容易用于查找重复项,但其性能相当差。如果文件夹中有很多文件,则计算它们的哈希值将需要很长时间。首先比较文件的大小会更容易(这是一个不需要计算的现成文件属性)。然后我们将仅获得具有相同大小的文件的哈希值:

$file_dublicates = Get-ChildItem -path C:\Share\ -Recurse| Group-Object -property Length| Where-Object { $_.count -gt 1 }| Select-Object -Expand Group| Get-FileHash | Group-Object -property hash | Where-Object { $_.count -gt 1 }| ForEach-Object { $_.group | Select-Object Path, Hash }

您可以使用Measure-Command cmdlet在测试文件夹上比较这两个命令的性能:

Measure-Command {your_powershell_command}

对于包含 2,000 个文件的文件夹,第二个命令比第一个命令快得多(10 分钟 vs 3 秒)。

您可以提示用户选择要删除的重复文件。为此,请将重复文件列表通过管道传输到 Out-GridView cmdlet:

$file_dublicates | Out-GridView -Title "Select files to delete" -OutputMode Multiple -PassThru|Remove-Item -Verbose -WhatIf

[玩转系统] 如何使用 PowerShell 查找重复文件

用户可以在表中选择要删除的文件(要选择多个文件,请按住 CTRL),然后单击“确定”。

您可以使用Move-Item将选定的文件移动到另一个目录,而不是删除。

此外,您还可以用硬链接替换重复的文件。该方法可以将文件保留在适当的位置并显着节省磁盘空间。

param(
[Parameter(Mandatory=$True)]
[ValidateScript({Test-Path -Path $_ -PathType Container})]
[string]$dir1,
[Parameter(Mandatory=$True)]
[ValidateScript({(Test-Path -Path $_ -PathType Container) -and $_ -ne $dir1})]
[string]$dir2
)
Get-ChildItem -Recurse $dir1, $dir2 |
Group-Object Length | Where-Object {$_.Count -ge 2} |
Select-Object -Expand Group | Get-FileHash |
Group-Object hash | Where-Object {$_.Count -ge 2} |
Foreach-Object {
$f1 = $_.Group[0].Path
Remove-Item $f1
New-Item -ItemType HardLink -Path $f1 -Target $_.Group[1].Path | Out-Null
#fsutil hardlink create $f1 $_.Group[1].Path
}

要运行该文件,请使用以下格式的命令:

.\hardlinks.ps1 -dir1 d:\folder1 -dir2 d:\folder2

该脚本可用于查找静态文件的重复项(不会更改!)并用符号硬链接替换。

在Windows Server上,您可以使用文件服务器角色内置的重复数据删除功能来解决文件重复的问题。然而,当使用重复数据删除和增量备份时,从备份恢复时会遇到一些麻烦。

此外,您还可以使用控制台dupemerge工具来用硬链接替换重复文件。

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯