-
Notifications
You must be signed in to change notification settings - Fork 0
/
Remove-DuplicateFiles.ps1
47 lines (39 loc) · 1.43 KB
/
Remove-DuplicateFiles.ps1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
<#
Deletes files in the transient directory which are equal. Does not run recursively.
#>
param(
[Parameter(Mandatory=$true)]
[string]
$TransientDirectory,
[Parameter(Mandatory=$true)]
[string]
$PersistentDirectory,
[switch]
$SkipSizeComparison)
$transientFiles = Get-ChildItem $TransientDirectory
$persistentFiles = Get-ChildItem $PersistentDirectory
$removedCount = 0
foreach ($file in $transientFiles)
{
foreach ($persistentFile in $persistentFiles)
{
if ($persistentFile.Name -eq $file.Name)
{
if ($persistentFile.Length -eq $file.Length -or $SkipSizeComparison)
{
++$removedCount
if (-not (Test-Path (Join-Path $TransientDirectory "deleted")))
{
New-Item -ItemType directory -Path (Join-Path $TransientDirectory "deleted")
}
Move-Item (Join-Path $TransientDirectory $file) (Join-Path $TransientDirectory (Join-Path "deleted" $file))
break;
}
else
{
Write-Warning "File $($persistentFile.Name) has a persistent length of $($persistentFile.Length / (1024 * 1024)) MB but a transient length of $($file.Length / (1024 * 1024)) MB. This does not count as a match."
}
}
}
}
Write-Output "Removed $removedCount of $($transientFiles.Count) files in the persistent directory structure."