-
-
Save yzorg/e92c5eb60e97b1d6381b to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
param ( | |
[switch]$Clear | |
) | |
# if you want to reload a previous file list | |
#$stat = ConvertFrom-Json (gc dir-cleanup-filecount-by-directory.json -join "`n") | |
if ($Clear) { | |
$stat = @() | |
} elseif ($stat.Count -ne 0 -and (-not "$($stat[0].DirPath)".StartsWith($PWD.ProviderPath))) { | |
Write-Warning "Path changed, clearing cached file list." | |
Read-Host -Prompt 'Press -Enter-' | |
$stat = @() | |
} | |
$lineCount = 0 | |
if ($stat.Count -eq 0) { | |
$stat = gci -Recurse -Directory | %{ # -Exclude 'Visual Studio 2013' # test in 'Documents' folder | |
if (++$lineCount % 100 -eq 0) { Write-Warning "file count $lineCount" } | |
New-Object psobject -Property @{ | |
DirPath=$_.FullName; | |
DirPathLength=$_.FullName.Length; | |
FileCount=($_ | gci -Force -File).Count; | |
DirCount=($_ | gci -Force -Directory).Count | |
} | |
} | |
$stat | ConvertTo-Json | Out-File dir-cleanup-filecount-by-directory.json -Verbose | |
} | |
$delelteListTxt = 'dir-cleanup-emptydirs-{0}-{1}.txt' -f ((date -f s) -replace '[-:]','' -replace 'T','_'),$env:USERNAME | |
$stat | | |
? FileCount -eq 0 | | |
sort -property @{Expression="DirPathLength";Descending=$true}, @{Expression="DirPath";Descending=$false} | | |
select -ExpandProperty DirPath | #-First 10 | | |
?{ @(gci $_ -Force).Count -eq 0 } | %{ | |
Remove-Item $_ -Verbose # -WhatIf # uncomment to see the first pass of folders to be cleaned** | |
$_ | Out-File -Append -Encoding utf8 $delelteListTxt | |
sleep 0.1 | |
} | |
# ** - The list you'll see from -WhatIf isn't a complete list because parent folders | |
# might also qualify after the first level is cleaned. The -WhatIf list will | |
# show correct breath, which is what I want to see before running the command. | |
return | |
# I always put a return on my scripts, after the return I'll sometimes have test commands or related folders. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment