-
Created by
Dmitriy Zubov, last updated on Sept 08, 2025 9 minute read
Введение
Со временем фотоархивы начинают разрастаться, и в них появляются дубликаты: копии одних и тех же файлов с разными именами или из разных папок.
Вручную искать их неудобно, а сторонние программы часто перегружены рекламой или не дают гибкости.
Для таких случаев можно использовать встроенный PowerShell 5.1 и простой скрипт, который:
- ищет дубликаты строго по содержимому файла (не по имени и не по дате);
- сравнивает файлы из двух каталогов;
- в "dry run" режиме показывает список совпадений;
- в "live" режиме удаляет дубликаты из второго каталога (в корзину, с возможностью восстановления).
Как работает скрипт
Алгоритм предельно простой и надёжный:
- Файлы обоих каталогов фильтруются по расширениям (jpg, png, mp4 и др.).
- Для каждого файла в "основном" каталоге считается размер и SHA1-хэш содержимого.
- Файлы из второго каталога проверяются по тем же признакам.
- Если совпадает и размер, и хэш, это гарантированно один и тот же файл.
- Дубликаты показываются на экране (dry run) или удаляются (live).
Подготовка
- Скрипт работает в Windows PowerShell 5.1 (это версия по умолчанию в Windows 10/11).
- Запускать его удобно через PowerShell ISE (F5).
- Никаких сторонних библиотек или модулей не требуется.
Использование
1. Скопируйте код скрипта (см. ниже) в новый файл PowerShell ISE.
2. В начале файла укажите пути к каталогам:
- DirA — эталонная папка (в ней ничего не трогаем);
- DirB — папка-кандидат (в ней ищем и удаляем дубли).
3. Настройте флаг: - $LIVE = $false — просто посмотреть список дублей (режим по умолчанию);
- $LIVE = $true — удалить дубликаты из DirB (отправляются в корзину).
4. Нажмите F5 для запуска.
5. В консоли отобразятся: - информация о количестве файлов и совпадениях;
- таблица найденных дублей (ограничена первыми 100 записями);
- предупреждение о том, был ли запуск в dry run или live.
Ограничения
- Проверка идёт строго побайтно (Size + SHA1).
Это значит: если фото пересохранено с другим качеством или повернуто — оно будет считаться другим файлом. - В режиме live все файлы из DirB, определённые как дубли, перемещаются в Корзину (а не безвозвратно удаляются).
Код скрипта
Expand source
# ============================================
# Duplicate Finder (Exact match by Size+SHA1)
# Windows PowerShell 5.1 - no params, no logs
# ============================================
# -------- USER SETTINGS (edit these lines) --------
$DIR_A = "C:\1" # Reference folder (will NOT be modified)
$DIR_B = "C:\2" # Candidates (duplicates here may be removed in LIVE mode)
$LIVE = $false # $false = preview only; $true = delete duplicates from DirB (Recycle Bin)
$EXTENSIONS = @(".jpg",".jpeg",".png",".gif",".tif",".tiff",".bmp",".heic",".webp",
".mp4",".mov",".avi",".mkv",".mts",".m2ts",".3gp",".wmv")
$PREVIEW_MAX = 100 # How many rows to print in preview
# --------------------------------------------------
# Console helpers
function Write-Info($msg) { Write-Host "[INFO ] $msg" }
function Write-Warn($msg) { Write-Host "[WARN ] $msg" -ForegroundColor Yellow }
function Write-Err ($msg) { Write-Host "[ERROR] $msg" -ForegroundColor Red }
# Send to Recycle Bin (PS 5.1 / .NET Framework)
function Remove-ToRecycleBin {
param([string]$Path)
try {
Add-Type -AssemblyName Microsoft.VisualBasic -ErrorAction SilentlyContinue | Out-Null
$UIOption = [Microsoft.VisualBasic.FileIO.UIOption]::OnlyErrorDialogs
$RecycleOption = [Microsoft.VisualBasic.FileIO.RecycleOption]::SendToRecycleBin
[Microsoft.VisualBasic.FileIO.FileSystem]::DeleteFile($Path, $UIOption, $RecycleOption)
return $true
} catch { return $false }
}
# Enumerate files by extension
function Get-FilesByExtensions {
param([string]$Root, [string[]]$Extensions)
if (-not (Test-Path -LiteralPath $Root)) { throw "Path not found: $Root" }
$extSet = New-Object 'System.Collections.Generic.HashSet[string]'
foreach ($e in $Extensions) { if ($e) { $extSet.Add($e.ToLowerInvariant()) | Out-Null } }
$files = Get-ChildItem -LiteralPath $Root -Recurse -File -ErrorAction SilentlyContinue
$list = New-Object System.Collections.Generic.List[System.IO.FileInfo]
foreach ($f in $files) {
$ext = [System.IO.Path]::GetExtension($f.Name)
if ($ext -and $extSet.Contains($ext.ToLowerInvariant())) { $list.Add($f) | Out-Null }
}
return $list
}
# Compute SHA1 with basic retry (handles transient IO locks)
function Get-FileSHA1 {
param([string]$Path)
for ($r=0; $r -lt 2; $r++) {
try {
return (Get-FileHash -Path $Path -Algorithm SHA1).Hash
} catch {
Start-Sleep -Milliseconds 100
}
}
throw "Failed to hash: $Path"
}
# ---- Main ----
try {
$DirA = (Resolve-Path -LiteralPath $DIR_A).Path
$DirB = (Resolve-Path -LiteralPath $DIR_B).Path
} catch {
Write-Err $_.Exception.Message
return
}
if ($DirA.TrimEnd('\') -ieq $DirB.TrimEnd('\')) {
Write-Err "DirA and DirB must be different."
return
}
Write-Info "DirA: $DirA"
Write-Info "DirB: $DirB"
Write-Info ("Mode: {0}" -f ($(if ($LIVE) { "LIVE (will delete duplicates from DirB -> Recycle Bin)" } else { "DRY (no deletion)" })))
Write-Info "Match method: Exact Size + SHA1"
Write-Info "Scanning DirA..."
$filesA = Get-FilesByExtensions -Root $DirA -Extensions $EXTENSIONS
Write-Info ("DirA files: {0}" -f $filesA.Count)
Write-Info "Indexing DirA by Size..."
# Map: size -> list of { Path, SHA1 }
$mapA = @{}
$i = 0
foreach ($f in $filesA) {
$i++
if ($i % 300 -eq 0) { Write-Host (" ...{0}/{1}" -f $i, $filesA.Count) }
$size = $f.Length
if (-not $mapA.ContainsKey($size)) {
$mapA[$size] = New-Object System.Collections.ArrayList
}
# We will lazily compute SHA1 for A only when needed by a matching size from B.
# To keep things simple and deterministic, pre-hash A (hundreds of files is fine).
try {
$sha1 = Get-FileSHA1 -Path $f.FullName
} catch {
Write-Warn $_.Exception.Message
continue
}
[void]$mapA[$size].Add(@{ Path = $f.FullName; SHA1 = $sha1 })
}
Write-Info "Scanning DirB..."
$filesB = Get-FilesByExtensions -Root $DirB -Extensions $EXTENSIONS
Write-Info ("DirB files: {0}" -f $filesB.Count)
Write-Info "Matching duplicates (DirB vs DirA by Size+SHA1)..."
$dups = New-Object System.Collections.Generic.List[object]
$j = 0
foreach ($f in $filesB) {
$j++
if ($j % 300 -eq 0) { Write-Host (" ...{0}/{1}" -f $j, $filesB.Count) }
$size = $f.Length
if (-not $mapA.ContainsKey($size)) { continue } # quick pre-filter by size
# Compute hash for B candidate
$bHash = $null
try {
$bHash = Get-FileSHA1 -Path $f.FullName
} catch {
Write-Warn $_.Exception.Message
continue
}
# Compare with all A entries of the same size
$aList = $mapA[$size]
foreach ($a in $aList) {
if ($a.SHA1 -eq $bHash) {
$dups.Add([PSCustomObject]@{
SizeBytes = $size
SHA1 = $bHash
InA = $a.Path
InB = $f.FullName
}) | Out-Null
}
}
}
Write-Info ("Exact duplicates found: {0}" -f $dups.Count)
# Preview (unique by InB), limit to PREVIEW_MAX
if ($dups.Count -gt 0) {
$uniq = $dups | Group-Object InB | ForEach-Object { $_.Group[0] }
Write-Host ""
Write-Host "=== PREVIEW (first $PREVIEW_MAX, unique by InB) ==="
$uniq | Select-Object SizeBytes, InA, InB -First $PREVIEW_MAX | Format-Table -AutoSize
if ($uniq.Count -gt $PREVIEW_MAX) {
Write-Warn ("...and {0} more not shown" -f ($uniq.Count - $PREVIEW_MAX))
}
Write-Host "==============================================="
} else {
Write-Warn "No exact (byte-identical) duplicates detected by Size+SHA1."
}
if (-not $LIVE) {
Write-Warn "DRY RUN complete. No deletions performed. Set `$LIVE = `$true to remove duplicates in DirB (to Recycle Bin)."
return
}
# LIVE deletion (unique by InB)
Write-Warn "LIVE MODE: sending duplicates from DirB to Recycle Bin..."
$targets = $dups | Group-Object InB | ForEach-Object { $_.Name }
$deleted = 0; $failed = 0
$k = 0
foreach ($pathB in $targets) {
$k++
if ($k % 100 -eq 0) { Write-Host (" deleting... {0}/{1}" -f $k, $targets.Count) }
if (Test-Path -LiteralPath $pathB) {
if (Remove-ToRecycleBin -Path $pathB) {
$deleted++
Write-Host ("[DEL ] {0}" -f $pathB)
} else {
$failed++
Write-Warn ("[FAIL] {0}" -f $pathB)
}
} else {
$failed++
Write-Warn ("[MISS] {0} (already gone?)" -f $pathB)
}
}
Write-Info ("Deletion summary: deleted={0}, failed/missed={1}" -f $deleted, $failed)
Пример использования
Dry-run Expand source
[INFO ] DirA: G:\HTC\1
[INFO ] DirB: G:\HTC\2
[INFO ] Mode: DRY (no deletion)
[INFO ] Match method: Exact Size + SHA1
[INFO ] Scanning DirA...
[INFO ] DirA files: 446
[INFO ] Indexing DirA by Size...
...300/446
[INFO ] Scanning DirB...
[INFO ] DirB files: 373
[INFO ] Matching duplicates (DirB vs DirA by Size+SHA1)...
...300/373
[INFO ] Exact duplicates found: 125
=== PREVIEW (first 100, unique by InB) ===
SizeBytes InA InB
--------- --- ---
588221 G:\HTC\1\IMAG0018.jpg G:\HTC\2\1362058970899.jpg
954926 G:\HTC\1\IMAG0056.jpg G:\HTC\2\1363077617069.jpg
459279 G:\HTC\1\IMAG0057.jpg G:\HTC\2\1363077784709.jpg
388389 G:\HTC\1\IMAG0058.jpg G:\HTC\2\1363079961517.jpg
451872 G:\HTC\1\IMAG0086.jpg G:\HTC\2\1363320518888.jpg
1053514 G:\HTC\1\IMAG0091.jpg G:\HTC\2\1363445381567.jpg
729918 G:\HTC\1\IMAG0094.jpg G:\HTC\2\1363446004621.jpg
804966 G:\HTC\1\IMAG0106.jpg G:\HTC\2\1363595407867.jpg
943645 G:\HTC\1\IMAG0137.jpg G:\HTC\2\1364620576203.jpg
1138647 G:\HTC\1\IMAG0138.jpg G:\HTC\2\1364733349818.jpg
394164 G:\HTC\1\IMAG0139.jpg G:\HTC\2\1364753650346.jpg
1442850 G:\HTC\1\IMAG0141.jpg G:\HTC\2\1364825323600.jpg
1027479 G:\HTC\1\IMAG0142.jpg G:\HTC\2\1364825392036.jpg
393121 G:\HTC\1\IMAG0143.jpg G:\HTC\2\1364834957542.jpg
462768 G:\HTC\1\IMAG0144.jpg G:\HTC\2\1364835966827.jpg
486816 G:\HTC\1\IMAG0145.jpg G:\HTC\2\1364836127246.jpg
563612 G:\HTC\1\IMAG0146.jpg G:\HTC\2\1364836690469.jpg
80286 G:\HTC\1\IMAG0147.jpg G:\HTC\2\1364836867918.jpg
641127 G:\HTC\1\IMAG0148.jpg G:\HTC\2\1364881850960.jpg
1124759 G:\HTC\1\IMAG0149.jpg G:\HTC\2\1364881944002.jpg
696786 G:\HTC\1\IMAG0150.jpg G:\HTC\2\1364883087762.jpg
722554 G:\HTC\1\IMAG0151.jpg G:\HTC\2\1364894501067.jpg
1054041 G:\HTC\1\IMAG0152.jpg G:\HTC\2\1364966704187.jpg
665467 G:\HTC\1\IMAG0153.jpg G:\HTC\2\1364973531243.jpg
703397 G:\HTC\1\IMAG0154.jpg G:\HTC\2\1364979118276.jpg
698491 G:\HTC\1\IMAG0155.jpg G:\HTC\2\1364979813742.jpg
702312 G:\HTC\1\IMAG0159.jpg G:\HTC\2\1365063153491.jpg
633756 G:\HTC\1\IMAG0178.jpg G:\HTC\2\1365413366493.jpg
703424 G:\HTC\1\IMAG0179.jpg G:\HTC\2\1365489368986.jpg
1445396 G:\HTC\1\IMAG0180.jpg G:\HTC\2\1365575622452.jpg
333699 G:\HTC\1\IMAG0181.jpg G:\HTC\2\1365876802562.jpg
441843 G:\HTC\1\IMAG0182.jpg G:\HTC\2\1365908505060.jpg
660246 G:\HTC\1\IMAG0184.jpg G:\HTC\2\1365932973712.jpg
429681 G:\HTC\1\IMAG0186.jpg G:\HTC\2\1366170898366.jpg
950685 G:\HTC\1\IMAG0187.jpg G:\HTC\2\1366209022342.jpg
587641 G:\HTC\1\IMAG0188.jpg G:\HTC\2\1366259951448.jpg
1281015 G:\HTC\1\IMAG0195.jpg G:\HTC\2\1366282360440.jpg
1051292 G:\HTC\1\IMAG0196.jpg G:\HTC\2\1366302851367.jpg
1953143 G:\HTC\1\IMAG0197.jpg G:\HTC\2\1366355864408.jpg
2768321 G:\HTC\1\IMAG0198.jpg G:\HTC\2\1366369298519.jpg
1008320 G:\HTC\1\IMAG0205.jpg G:\HTC\2\1366793810404.jpg
311023 G:\HTC\1\IMAG0213.jpg G:\HTC\2\1366996578507.jpg
1023622 G:\HTC\1\IMAG0214.jpg G:\HTC\2\1366996695563.jpg
1277407 G:\HTC\1\IMAG0216.jpg G:\HTC\2\1367057094395.jpg
1341053 G:\HTC\1\IMAG0217.jpg G:\HTC\2\1367068499201.jpg
2115093 G:\HTC\1\IMAG0219.jpg G:\HTC\2\1367095011539.jpg
2204012 G:\HTC\1\IMAG0220.jpg G:\HTC\2\1367139206221.jpg
1515483 G:\HTC\1\IMAG0221.jpg G:\HTC\2\1367139878469.jpg
2304019 G:\HTC\1\IMAG0222.jpg G:\HTC\2\1367175126252.jpg
1425321 G:\HTC\1\IMAG0223.jpg G:\HTC\2\1367176573043.jpg
880847 G:\HTC\1\IMAG0224.jpg G:\HTC\2\1367210974465.jpg
2474958 G:\HTC\1\IMAG0225.jpg G:\HTC\2\1367211327847.jpg
2116503 G:\HTC\1\IMAG0226.jpg G:\HTC\2\1367211363180.jpg
2435585 G:\HTC\1\IMAG0227.jpg G:\HTC\2\1367222901220.jpg
1840658 G:\HTC\1\IMAG0229.jpg G:\HTC\2\1367244780099.jpg
962832 G:\HTC\1\IMAG0230.jpg G:\HTC\2\1367306522656.jpg
1066486 G:\HTC\1\IMAG0231.jpg G:\HTC\2\1367307647258.jpg
2381119 G:\HTC\1\IMAG0232.jpg G:\HTC\2\1367315399665.jpg
1471177 G:\HTC\1\IMAG0233.jpg G:\HTC\2\1367321589164.jpg
3192215 G:\HTC\1\IMAG0234.jpg G:\HTC\2\1367321696263.jpg
1456028 G:\HTC\1\IMAG0235.jpg G:\HTC\2\1367321819213.jpg
923638 G:\HTC\1\IMAG0236.jpg G:\HTC\2\1367333555999.jpg
1801088 G:\HTC\1\IMAG0243.jpg G:\HTC\2\1367523644214.jpg
2087287 G:\HTC\1\IMAG0244.jpg G:\HTC\2\1367566636837.jpg
1493749 G:\HTC\1\IMAG0245.jpg G:\HTC\2\1367566879688.jpg
1484383 G:\HTC\1\IMAG0247.jpg G:\HTC\2\1367660813069.jpg
2468054 G:\HTC\1\IMAG0248.jpg G:\HTC\2\1367693392258.jpg
945267 G:\HTC\1\IMAG0251.jpg G:\HTC\2\1367823835624.jpg
1265107 G:\HTC\1\IMAG0253.jpg G:\HTC\2\1367998235665.jpg
1645488 G:\HTC\1\IMAG0254.jpg G:\HTC\2\1368004429272.jpg
3420740 G:\HTC\1\IMAG0255.jpg G:\HTC\2\1368006428636.jpg
713348 G:\HTC\1\IMAG0311.jpg G:\HTC\2\1368354536405.jpg
1274572 G:\HTC\1\IMAG0312.jpg G:\HTC\2\1368360536693.jpg
1663341 G:\HTC\1\IMAG0313.jpg G:\HTC\2\1368445151888.jpg
2048378 G:\HTC\1\IMAG0326.jpg G:\HTC\2\1368694138061.jpg
1886635 G:\HTC\1\IMAG0331.jpg G:\HTC\2\1368812538578.jpg
2452256 G:\HTC\1\IMAG0332.jpg G:\HTC\2\1368812591474.jpg
2211613 G:\HTC\1\IMAG0333.jpg G:\HTC\2\1368812667889.jpg
2020178 G:\HTC\1\IMAG0334.jpg G:\HTC\2\1368856275248.jpg
1057429 G:\HTC\1\IMAG0335.jpg G:\HTC\2\1368860202167.jpg
1131721 G:\HTC\1\IMAG0336.jpg G:\HTC\2\1368860272056.jpg
1606498 G:\HTC\1\IMAG0337.jpg G:\HTC\2\1368870800034.jpg
2132503 G:\HTC\1\IMAG0344.jpg G:\HTC\2\1368875390790.jpg
1287163 G:\HTC\1\IMAG0360.jpg G:\HTC\2\1369035538156.jpg
1031164 G:\HTC\1\IMAG0366.jpg G:\HTC\2\1369119430895.jpg
3052461 G:\HTC\1\IMAG0372.jpg G:\HTC\2\1369126335095.jpg
3048389 G:\HTC\1\IMAG0373.jpg G:\HTC\2\1369147777797.jpg
1622929 G:\HTC\1\IMAG0374.jpg G:\HTC\2\1369199159966.jpg
599631 G:\HTC\1\IMAG0376.jpg G:\HTC\2\1369379521015.jpg
424870 G:\HTC\1\IMAG0378.jpg G:\HTC\2\1369388359264.jpg
536877 G:\HTC\1\IMAG0379.jpg G:\HTC\2\1369388546865.jpg
870369 G:\HTC\1\IMAG0380.jpg G:\HTC\2\1369388645578.jpg
1215211 G:\HTC\1\IMAG0381.jpg G:\HTC\2\1369404705045.jpg
816387 G:\HTC\1\IMAG0382.jpg G:\HTC\2\1369405772959.jpg
963431 G:\HTC\1\IMAG0383.jpg G:\HTC\2\1369407782148.jpg
927428 G:\HTC\1\IMAG0384.jpg G:\HTC\2\1369407834472.jpg
926236 G:\HTC\1\IMAG0403.jpg G:\HTC\2\1369505024776.jpg
476552 G:\HTC\1\IMAG0404.jpg G:\HTC\2\1369505799446.jpg
566986 G:\HTC\1\IMAG0405.jpg G:\HTC\2\1369506031202.jpg
751235 G:\HTC\1\IMAG0406.jpg G:\HTC\2\1369557893387.jpg
[WARN ] ...and 25 more not shown
===============================================
[WARN ] DRY RUN complete. No deletions performed. Set $LIVE = $true to remove duplicates in DirB (to Recycle Bin).
Боевой режим Expand source
[INFO ] DirA: G:\HTC\1
[INFO ] DirB: G:\HTC\2
[INFO ] Mode: LIVE (will delete duplicates from DirB -> Recycle Bin)
[INFO ] Match method: Exact Size + SHA1
[INFO ] Scanning DirA...
[INFO ] DirA files: 446
[INFO ] Indexing DirA by Size...
...300/446
[INFO ] Scanning DirB...
[INFO ] DirB files: 373
[INFO ] Matching duplicates (DirB vs DirA by Size+SHA1)...
...300/373
[INFO ] Exact duplicates found: 125
=== PREVIEW (first 100, unique by InB) ===
SizeBytes InA InB
--------- --- ---
588221 G:\HTC\1\IMAG0018.jpg G:\HTC\2\1362058970899.jpg
954926 G:\HTC\1\IMAG0056.jpg G:\HTC\2\1363077617069.jpg
459279 G:\HTC\1\IMAG0057.jpg G:\HTC\2\1363077784709.jpg
388389 G:\HTC\1\IMAG0058.jpg G:\HTC\2\1363079961517.jpg
451872 G:\HTC\1\IMAG0086.jpg G:\HTC\2\1363320518888.jpg
1053514 G:\HTC\1\IMAG0091.jpg G:\HTC\2\1363445381567.jpg
729918 G:\HTC\1\IMAG0094.jpg G:\HTC\2\1363446004621.jpg
804966 G:\HTC\1\IMAG0106.jpg G:\HTC\2\1363595407867.jpg
943645 G:\HTC\1\IMAG0137.jpg G:\HTC\2\1364620576203.jpg
1138647 G:\HTC\1\IMAG0138.jpg G:\HTC\2\1364733349818.jpg
394164 G:\HTC\1\IMAG0139.jpg G:\HTC\2\1364753650346.jpg
1442850 G:\HTC\1\IMAG0141.jpg G:\HTC\2\1364825323600.jpg
1027479 G:\HTC\1\IMAG0142.jpg G:\HTC\2\1364825392036.jpg
393121 G:\HTC\1\IMAG0143.jpg G:\HTC\2\1364834957542.jpg
462768 G:\HTC\1\IMAG0144.jpg G:\HTC\2\1364835966827.jpg
486816 G:\HTC\1\IMAG0145.jpg G:\HTC\2\1364836127246.jpg
563612 G:\HTC\1\IMAG0146.jpg G:\HTC\2\1364836690469.jpg
80286 G:\HTC\1\IMAG0147.jpg G:\HTC\2\1364836867918.jpg
641127 G:\HTC\1\IMAG0148.jpg G:\HTC\2\1364881850960.jpg
1124759 G:\HTC\1\IMAG0149.jpg G:\HTC\2\1364881944002.jpg
696786 G:\HTC\1\IMAG0150.jpg G:\HTC\2\1364883087762.jpg
722554 G:\HTC\1\IMAG0151.jpg G:\HTC\2\1364894501067.jpg
1054041 G:\HTC\1\IMAG0152.jpg G:\HTC\2\1364966704187.jpg
665467 G:\HTC\1\IMAG0153.jpg G:\HTC\2\1364973531243.jpg
703397 G:\HTC\1\IMAG0154.jpg G:\HTC\2\1364979118276.jpg
698491 G:\HTC\1\IMAG0155.jpg G:\HTC\2\1364979813742.jpg
702312 G:\HTC\1\IMAG0159.jpg G:\HTC\2\1365063153491.jpg
633756 G:\HTC\1\IMAG0178.jpg G:\HTC\2\1365413366493.jpg
703424 G:\HTC\1\IMAG0179.jpg G:\HTC\2\1365489368986.jpg
1445396 G:\HTC\1\IMAG0180.jpg G:\HTC\2\1365575622452.jpg
333699 G:\HTC\1\IMAG0181.jpg G:\HTC\2\1365876802562.jpg
441843 G:\HTC\1\IMAG0182.jpg G:\HTC\2\1365908505060.jpg
660246 G:\HTC\1\IMAG0184.jpg G:\HTC\2\1365932973712.jpg
429681 G:\HTC\1\IMAG0186.jpg G:\HTC\2\1366170898366.jpg
950685 G:\HTC\1\IMAG0187.jpg G:\HTC\2\1366209022342.jpg
587641 G:\HTC\1\IMAG0188.jpg G:\HTC\2\1366259951448.jpg
1281015 G:\HTC\1\IMAG0195.jpg G:\HTC\2\1366282360440.jpg
1051292 G:\HTC\1\IMAG0196.jpg G:\HTC\2\1366302851367.jpg
1953143 G:\HTC\1\IMAG0197.jpg G:\HTC\2\1366355864408.jpg
2768321 G:\HTC\1\IMAG0198.jpg G:\HTC\2\1366369298519.jpg
1008320 G:\HTC\1\IMAG0205.jpg G:\HTC\2\1366793810404.jpg
311023 G:\HTC\1\IMAG0213.jpg G:\HTC\2\1366996578507.jpg
1023622 G:\HTC\1\IMAG0214.jpg G:\HTC\2\1366996695563.jpg
1277407 G:\HTC\1\IMAG0216.jpg G:\HTC\2\1367057094395.jpg
1341053 G:\HTC\1\IMAG0217.jpg G:\HTC\2\1367068499201.jpg
2115093 G:\HTC\1\IMAG0219.jpg G:\HTC\2\1367095011539.jpg
2204012 G:\HTC\1\IMAG0220.jpg G:\HTC\2\1367139206221.jpg
1515483 G:\HTC\1\IMAG0221.jpg G:\HTC\2\1367139878469.jpg
2304019 G:\HTC\1\IMAG0222.jpg G:\HTC\2\1367175126252.jpg
1425321 G:\HTC\1\IMAG0223.jpg G:\HTC\2\1367176573043.jpg
880847 G:\HTC\1\IMAG0224.jpg G:\HTC\2\1367210974465.jpg
2474958 G:\HTC\1\IMAG0225.jpg G:\HTC\2\1367211327847.jpg
2116503 G:\HTC\1\IMAG0226.jpg G:\HTC\2\1367211363180.jpg
2435585 G:\HTC\1\IMAG0227.jpg G:\HTC\2\1367222901220.jpg
1840658 G:\HTC\1\IMAG0229.jpg G:\HTC\2\1367244780099.jpg
962832 G:\HTC\1\IMAG0230.jpg G:\HTC\2\1367306522656.jpg
1066486 G:\HTC\1\IMAG0231.jpg G:\HTC\2\1367307647258.jpg
2381119 G:\HTC\1\IMAG0232.jpg G:\HTC\2\1367315399665.jpg
1471177 G:\HTC\1\IMAG0233.jpg G:\HTC\2\1367321589164.jpg
3192215 G:\HTC\1\IMAG0234.jpg G:\HTC\2\1367321696263.jpg
1456028 G:\HTC\1\IMAG0235.jpg G:\HTC\2\1367321819213.jpg
923638 G:\HTC\1\IMAG0236.jpg G:\HTC\2\1367333555999.jpg
1801088 G:\HTC\1\IMAG0243.jpg G:\HTC\2\1367523644214.jpg
2087287 G:\HTC\1\IMAG0244.jpg G:\HTC\2\1367566636837.jpg
1493749 G:\HTC\1\IMAG0245.jpg G:\HTC\2\1367566879688.jpg
1484383 G:\HTC\1\IMAG0247.jpg G:\HTC\2\1367660813069.jpg
2468054 G:\HTC\1\IMAG0248.jpg G:\HTC\2\1367693392258.jpg
945267 G:\HTC\1\IMAG0251.jpg G:\HTC\2\1367823835624.jpg
1265107 G:\HTC\1\IMAG0253.jpg G:\HTC\2\1367998235665.jpg
1645488 G:\HTC\1\IMAG0254.jpg G:\HTC\2\1368004429272.jpg
3420740 G:\HTC\1\IMAG0255.jpg G:\HTC\2\1368006428636.jpg
713348 G:\HTC\1\IMAG0311.jpg G:\HTC\2\1368354536405.jpg
1274572 G:\HTC\1\IMAG0312.jpg G:\HTC\2\1368360536693.jpg
1663341 G:\HTC\1\IMAG0313.jpg G:\HTC\2\1368445151888.jpg
2048378 G:\HTC\1\IMAG0326.jpg G:\HTC\2\1368694138061.jpg
1886635 G:\HTC\1\IMAG0331.jpg G:\HTC\2\1368812538578.jpg
2452256 G:\HTC\1\IMAG0332.jpg G:\HTC\2\1368812591474.jpg
2211613 G:\HTC\1\IMAG0333.jpg G:\HTC\2\1368812667889.jpg
2020178 G:\HTC\1\IMAG0334.jpg G:\HTC\2\1368856275248.jpg
1057429 G:\HTC\1\IMAG0335.jpg G:\HTC\2\1368860202167.jpg
1131721 G:\HTC\1\IMAG0336.jpg G:\HTC\2\1368860272056.jpg
1606498 G:\HTC\1\IMAG0337.jpg G:\HTC\2\1368870800034.jpg
2132503 G:\HTC\1\IMAG0344.jpg G:\HTC\2\1368875390790.jpg
1287163 G:\HTC\1\IMAG0360.jpg G:\HTC\2\1369035538156.jpg
1031164 G:\HTC\1\IMAG0366.jpg G:\HTC\2\1369119430895.jpg
3052461 G:\HTC\1\IMAG0372.jpg G:\HTC\2\1369126335095.jpg
3048389 G:\HTC\1\IMAG0373.jpg G:\HTC\2\1369147777797.jpg
1622929 G:\HTC\1\IMAG0374.jpg G:\HTC\2\1369199159966.jpg
599631 G:\HTC\1\IMAG0376.jpg G:\HTC\2\1369379521015.jpg
424870 G:\HTC\1\IMAG0378.jpg G:\HTC\2\1369388359264.jpg
536877 G:\HTC\1\IMAG0379.jpg G:\HTC\2\1369388546865.jpg
870369 G:\HTC\1\IMAG0380.jpg G:\HTC\2\1369388645578.jpg
1215211 G:\HTC\1\IMAG0381.jpg G:\HTC\2\1369404705045.jpg
816387 G:\HTC\1\IMAG0382.jpg G:\HTC\2\1369405772959.jpg
963431 G:\HTC\1\IMAG0383.jpg G:\HTC\2\1369407782148.jpg
927428 G:\HTC\1\IMAG0384.jpg G:\HTC\2\1369407834472.jpg
926236 G:\HTC\1\IMAG0403.jpg G:\HTC\2\1369505024776.jpg
476552 G:\HTC\1\IMAG0404.jpg G:\HTC\2\1369505799446.jpg
566986 G:\HTC\1\IMAG0405.jpg G:\HTC\2\1369506031202.jpg
751235 G:\HTC\1\IMAG0406.jpg G:\HTC\2\1369557893387.jpg
[WARN ] ...and 25 more not shown
===============================================
[WARN ] LIVE MODE: sending duplicates from DirB to Recycle Bin...
[DEL ] G:\HTC\2\1362058970899.jpg
[DEL ] G:\HTC\2\1363077617069.jpg
[DEL ] G:\HTC\2\1363077784709.jpg
[DEL ] G:\HTC\2\1363079961517.jpg
[DEL ] G:\HTC\2\1363320518888.jpg
[DEL ] G:\HTC\2\1363445381567.jpg
[DEL ] G:\HTC\2\1363446004621.jpg
[DEL ] G:\HTC\2\1363595407867.jpg
[DEL ] G:\HTC\2\1364620576203.jpg
[DEL ] G:\HTC\2\1364733349818.jpg
[DEL ] G:\HTC\2\1364753650346.jpg
[DEL ] G:\HTC\2\1364825323600.jpg
[DEL ] G:\HTC\2\1364825392036.jpg
[DEL ] G:\HTC\2\1364834957542.jpg
[DEL ] G:\HTC\2\1364835966827.jpg
[DEL ] G:\HTC\2\1364836127246.jpg
[DEL ] G:\HTC\2\1364836690469.jpg
[DEL ] G:\HTC\2\1364836867918.jpg
[DEL ] G:\HTC\2\1364881850960.jpg
[DEL ] G:\HTC\2\1364881944002.jpg
[DEL ] G:\HTC\2\1364883087762.jpg
[DEL ] G:\HTC\2\1364894501067.jpg
[DEL ] G:\HTC\2\1364966704187.jpg
[DEL ] G:\HTC\2\1364973531243.jpg
[DEL ] G:\HTC\2\1364979118276.jpg
[DEL ] G:\HTC\2\1364979813742.jpg
[DEL ] G:\HTC\2\1365063153491.jpg
[DEL ] G:\HTC\2\1365413366493.jpg
[DEL ] G:\HTC\2\1365489368986.jpg
[DEL ] G:\HTC\2\1365575622452.jpg
[DEL ] G:\HTC\2\1365876802562.jpg
[DEL ] G:\HTC\2\1365908505060.jpg
[DEL ] G:\HTC\2\1365932973712.jpg
[DEL ] G:\HTC\2\1366170898366.jpg
[DEL ] G:\HTC\2\1366209022342.jpg
[DEL ] G:\HTC\2\1366259951448.jpg
[DEL ] G:\HTC\2\1366282360440.jpg
[DEL ] G:\HTC\2\1366302851367.jpg
[DEL ] G:\HTC\2\1366355864408.jpg
[DEL ] G:\HTC\2\1366369298519.jpg
[DEL ] G:\HTC\2\1366793810404.jpg
[DEL ] G:\HTC\2\1366996578507.jpg
[DEL ] G:\HTC\2\1366996695563.jpg
[DEL ] G:\HTC\2\1367057094395.jpg
[DEL ] G:\HTC\2\1367068499201.jpg
[DEL ] G:\HTC\2\1367095011539.jpg
[DEL ] G:\HTC\2\1367139206221.jpg
[DEL ] G:\HTC\2\1367139878469.jpg
[DEL ] G:\HTC\2\1367175126252.jpg
[DEL ] G:\HTC\2\1367176573043.jpg
[DEL ] G:\HTC\2\1367210974465.jpg
[DEL ] G:\HTC\2\1367211327847.jpg
[DEL ] G:\HTC\2\1367211363180.jpg
[DEL ] G:\HTC\2\1367222901220.jpg
[DEL ] G:\HTC\2\1367244780099.jpg
[DEL ] G:\HTC\2\1367306522656.jpg
[DEL ] G:\HTC\2\1367307647258.jpg
[DEL ] G:\HTC\2\1367315399665.jpg
[DEL ] G:\HTC\2\1367321589164.jpg
[DEL ] G:\HTC\2\1367321696263.jpg
[DEL ] G:\HTC\2\1367321819213.jpg
[DEL ] G:\HTC\2\1367333555999.jpg
[DEL ] G:\HTC\2\1367523644214.jpg
[DEL ] G:\HTC\2\1367566636837.jpg
[DEL ] G:\HTC\2\1367566879688.jpg
[DEL ] G:\HTC\2\1367660813069.jpg
[DEL ] G:\HTC\2\1367693392258.jpg
[DEL ] G:\HTC\2\1367823835624.jpg
[DEL ] G:\HTC\2\1367998235665.jpg
[DEL ] G:\HTC\2\1368004429272.jpg
[DEL ] G:\HTC\2\1368006428636.jpg
[DEL ] G:\HTC\2\1368354536405.jpg
[DEL ] G:\HTC\2\1368360536693.jpg
[DEL ] G:\HTC\2\1368445151888.jpg
[DEL ] G:\HTC\2\1368694138061.jpg
[DEL ] G:\HTC\2\1368812538578.jpg
[DEL ] G:\HTC\2\1368812591474.jpg
[DEL ] G:\HTC\2\1368812667889.jpg
[DEL ] G:\HTC\2\1368856275248.jpg
[DEL ] G:\HTC\2\1368860202167.jpg
[DEL ] G:\HTC\2\1368860272056.jpg
[DEL ] G:\HTC\2\1368870800034.jpg
[DEL ] G:\HTC\2\1368875390790.jpg
[DEL ] G:\HTC\2\1369035538156.jpg
[DEL ] G:\HTC\2\1369119430895.jpg
[DEL ] G:\HTC\2\1369126335095.jpg
[DEL ] G:\HTC\2\1369147777797.jpg
[DEL ] G:\HTC\2\1369199159966.jpg
[DEL ] G:\HTC\2\1369379521015.jpg
[DEL ] G:\HTC\2\1369388359264.jpg
[DEL ] G:\HTC\2\1369388546865.jpg
[DEL ] G:\HTC\2\1369388645578.jpg
[DEL ] G:\HTC\2\1369404705045.jpg
[DEL ] G:\HTC\2\1369405772959.jpg
[DEL ] G:\HTC\2\1369407782148.jpg
[DEL ] G:\HTC\2\1369407834472.jpg
[DEL ] G:\HTC\2\1369505024776.jpg
[DEL ] G:\HTC\2\1369505799446.jpg
[DEL ] G:\HTC\2\1369506031202.jpg
deleting... 100/125
[DEL ] G:\HTC\2\1369557893387.jpg
[DEL ] G:\HTC\2\1369674668659.jpg
[DEL ] G:\HTC\2\1369674764271.jpg
[DEL ] G:\HTC\2\1369674916438.jpg
[DEL ] G:\HTC\2\1369675192109.jpg
[DEL ] G:\HTC\2\1369676639408.jpg
[DEL ] G:\HTC\2\1369679559597.jpg
[DEL ] G:\HTC\2\1369680612760.jpg
[DEL ] G:\HTC\2\1369682460332.jpg
[DEL ] G:\HTC\2\1369730406432.jpg
[DEL ] G:\HTC\2\1369737737312.jpg
[DEL ] G:\HTC\2\1369741144261.jpg
[DEL ] G:\HTC\2\1369741948857.jpg
[DEL ] G:\HTC\2\1369744450595.jpg
[DEL ] G:\HTC\2\1369749337645.jpg
[DEL ] G:\HTC\2\1370014209610.jpg
[DEL ] G:\HTC\2\1370014452368.jpg
[DEL ] G:\HTC\2\1370015312746.jpg
[DEL ] G:\HTC\2\1370029358532.jpg
[DEL ] G:\HTC\2\1370203372419.jpg
[DEL ] G:\HTC\2\1370206491652.jpg
[DEL ] G:\HTC\2\1370230729212.jpg
[DEL ] G:\HTC\2\1370368255370.jpg
[DEL ] G:\HTC\2\1370368574839.jpg
[DEL ] G:\HTC\2\1370466477971.jpg
[DEL ] G:\HTC\2\1370609273329.jpg
[INFO ] Deletion summary: deleted=125, failed/missed=0
Итог
Теперь у вас есть удобный способ чистить фотоархивы от дублей без лишнего софта.
Просто настройте каталоги, запустите в ISE, проверьте результат в dry run, а затем включите live-режим для удаления.
- No labels
Add Comment