Поиск по сайту:

Windows: Найдите и устраните дублирующиеся файлы с помощью PowerShell


Мы живем в мире больших данных, который является как благословением, так и проклятием. Большие данные обычно означают огромное количество файлов, таких как фотографии и видео, и в конечном итоге — огромное количество дискового пространства. Файлы случайно или намеренно перемещаются с одного места на другое, не подумав о том, что эти дублирующиеся файлы потребляют все больше и больше места для хранения. Я хочу изменить это вместе с вами в этом блоге. Мы будем искать дублирующиеся файлы, а затем перемещать их в другое место для дальнейшего просмотра.

Цель

С моим скриптом в руках вы сможете выполнить описанный сценарий. Убедитесь, что ваш компьютер работает под управлением Windows PowerShell 5.1 или PowerShell 7.

  1. Откройте PowerShell (Клавиша Windows + X + A)
  2. Перейдите к местоположению скрипта. Введите полный путь к папке назначения. Эта папка является нашей целью для поиска дубликатов файлов.

  3. Окно появится, чтобы выбрать дублирующиеся файлы на основе хэш-значения. Все выбранные файлы будут перемещены в C:\DuplicatesТекущаяДата

  4. После этого дубликаты файлов перемещаются в новое расположение. Вы снова увидите новое окно, которое показывает перемещенные файлы для дальнейшего просмотра.

Что приводит меня к коду.

Сценарий

Вот код для скачивания.

найти_дублирующиеся_файлы.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/

Статьи по данной тематике