Windows: PowerShell ile Yinelenen Dosyaları Bulun ve Ortadan Kaldırın
Hem nimet hem de lanet olan büyük veri dünyasında yaşıyoruz. Büyük veri genellikle fotoğraf ve video gibi çok sayıda dosya ve son olarak da çok büyük miktarda depolama alanı anlamına gelir. Dosyalar, bu yinelenen dosyaların giderek daha fazla depolama alanı tükettiği dikkate alınmadan yanlışlıkla veya kasıtlı olarak bir yerden diğerine taşınır. Bu blog yazısında bunu sizinle birlikte değiştirmek istiyorum. Yinelenen dosyaları arayacağız ve daha sonra daha ayrıntılı inceleme için bunları farklı bir depolama konumuna taşıyacağız.
Amaç
Elimdeki senaryomla açıklanan senaryoyu gerçekleştirebilirsiniz. Bilgisayarınızın Windows PowerShell 5.1 veya PowerShell 7 çalıştırdığından emin olun.
- PowerShell'i açın (Windows Tuşu + X + A)
Komut dosyası konumuna gidin. Hedef klasörün tam yolunu girin. Bu klasör, yinelenen dosyaları aramak için hedefimizdir
Karma değerine göre yinelenen dosyaları seçmek için bir pencere açılacaktır. Seçilen tüm dosyalar C:\DuplicatesCurrentDate konumuna taşınacak
Daha sonra yinelenen dosyalar yeni konuma taşınır. Tekrar incelenmek üzere taşınan dosyaları gösteren yeni bir pencerenin açıldığını göreceksiniz.
Bu da beni koda getiriyor.
Senaryo
İşte indirme kodu.
find_duplicate_files.ps1
Ve işte tam uzunluktaki kod. Kodu yerel bilgisayarınıza kopyalayın ve PowerShell ISE'de, Visual Studio Code'da veya seçtiğiniz bir düzenleyicide açın. F5'e (PowerShell ISE veya VS Kodu) basın.
# .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://sid-500.com
############# 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"
}
Kredi
İçimde bu senaryoyu yazma fikrini uyandıran Kenward Bradley'nin tek satırlık yazısına teşekkürler. Hadi bakalım:
http://kenwardtown.com/2016/12/29/find-duplicate-files-with-powershell/


