Windows: Найдите и устраните дублирующиеся файлы с помощью PowerShell
Мы живем в мире больших данных, который является как благословением, так и проклятием. Большие данные обычно означают огромное количество файлов, таких как фотографии и видео, и в конечном итоге — огромное количество дискового пространства. Файлы случайно или намеренно перемещаются с одного места на другое, не подумав о том, что эти дублирующиеся файлы потребляют все больше и больше места для хранения. Я хочу изменить это вместе с вами в этом блоге. Мы будем искать дублирующиеся файлы, а затем перемещать их в другое место для дальнейшего просмотра.
Цель
С моим скриптом в руках вы сможете выполнить описанный сценарий. Убедитесь, что ваш компьютер работает под управлением Windows PowerShell 5.1 или PowerShell 7.
- Откройте PowerShell (Клавиша Windows + X + A)
Перейдите к местоположению скрипта. Введите полный путь к папке назначения. Эта папка является нашей целью для поиска дубликатов файлов.
Окно появится, чтобы выбрать дублирующиеся файлы на основе хэш-значения. Все выбранные файлы будут перемещены в C:\DuplicatesТекущаяДата
-
После этого дубликаты файлов перемещаются в новое расположение. Вы снова увидите новое окно, которое показывает перемещенные файлы для дальнейшего просмотра.
Что приводит меня к коду.
Сценарий
Вот код для скачивания.
найти_дублирующиеся_файлы.ps1
А вот и код в полном объеме. Скопируйте код на свой локальный компьютер и откройте его в PowerShell ISE, Visual Studio Code или в редакторе на ваш выбор. Нажмите F5 (PowerShell ISE или VS Code).
.SYNOPSIS
find_ducplicate_files.ps1 finds duplicate files based on hash values.
.DESCRIPTION
Prompts for entering file path. Shows duplicate files for selection.
Selected files will be moved to new folder C:\Duplicates_Date for further review.
.EXAMPLE
Open PowerShell. Nagivate to the file location. Type .\find_duplicate_files.ps1 OR
Open PowerShell ISE. Open find_duplicate.ps1 and hit F5.
.NOTES
Author: Patrick Gruenauer | Microsoft MVP on PowerShell [2018-2020]
Web: https://active-directory.ru
############# Find Duplicate Files based on Hash Value ###############
''
$filepath = Read-Host 'Enter file path for searching duplicate files (e.g. C:\Temp, C:\)'
If (Test-Path $filepath) {
''
Write-Warning 'Searching for duplicates ... Please wait ...'
$duplicates = Get-ChildItem $filepath -File -Recurse `
-ErrorAction SilentlyContinue |
Get-FileHash |
Group-Object -Property Hash |
Where-Object Count -GT 1
If ($duplicates.count -lt 1)
{
Write-Warning 'No duplicates found.'
Break ''
}
else {
Write-Warning "Duplicates found."
$result = foreach ($d in $duplicates)
{
$d.Group | Select-Object -Property Path, Hash
}
$date = Get-Date -Format "MM/dd/yyy"
$itemstomove = $result |
Out-GridView -Title `
"Select files (CTRL for multiple) and press OK. Selected files will be moved to C:\Duplicates_$date" `
-PassThru
If ($itemstomove)
{
New-Item -ItemType Directory `
-Path $env:SystemDrive\Duplicates_$date -Force
Move-Item $itemstomove.Path `
-Destination $env:SystemDrive\Duplicates_$date -Force
''
Write-Warning `
"Mission accomplished. Selected files moved to C:\Duplicates_$date"
Start-Process "C:\Duplicates_$date"
}
else
{
Write-Warning "Operation aborted. No files selected."
}
}
}
else
{
Write-Warning `
"Folder not found. Use full path to directory e.g. C:\photos\patrick"
}
Кредиты
Спасибо Кенварду Брэдли за его однострочник, который вдохновил меня написать этот сценарий. Вот, держите:
http://kenwardtown.com/2016/12/29/find-duplicate-files-with-powershell/


