gpt4 book ai didi

powershell - 删除大量文件而不会耗尽内存

转载 作者:行者123 更新时间:2023-12-02 23:10:21 25 4
gpt4 key购买 nike

我们有一个COTS应用程序可以创建报告,并且永远不会将其删除。因此,我们需要开始清理它。我开始执行foreach,当该服务器上的文件多达50亿个时,它将耗尽服务器(36GB)的内存。搜索之后,您似乎可以像这样更改它

Get-ChildItem -path $Path -recurse | foreach {

它不会通过内存,但一次处理每个项目。在内存用尽之前,我可以获取1.4亿个文件。
Clear-Host
#Set Age to look for
$TimeLimit = (Get-Date).AddMonths(-4)
$Path = "D:\CC\LocalStorage"

$TotalFileCount = 0
$TotalDeletedCount = 0

Get-ChildItem -Path $Path -Recurse | foreach {
if ($_.LastWriteTime -le $TimeLimit) {
$TotalDeletedCount += 1
$_.Delete()
}
$TotalFileCount += 1

$FileDiv = $TotalFileCount % 10000
if ($FileDiv -eq 0 -and $TotalFileCount -ne 0) {
$TF = [string]::Format('{0:N0}', $TotalFileCount)
$TD = [string]::Format('{0:N0}', $TotalDeletedCount)
Write-Host "Files Scanned : " -ForegroundColor Green -NoNewline
Write-Host "$TF" -ForegroundColor Yellow -NoNewline
Write-Host " Deleted: " -ForegroundColor Green -NoNewline
Write-Host "$TD" -ForegroundColor Yellow
}

有一个更好的方法吗?我唯一的下一个想法就是不使用 -Recurse命令,而是使用自己的函数为每个目录调用自身。

编辑:

我使用了第一个答案中提供的代码,但不能解决问题。内存仍在增长。
$limit = (Get-Date).Date.AddMonths(-3)
$totalcount = 0
$deletecount = 0
$Path = "D:\CC\"

Get-ChildItem -Path $Path -Recurse -File | Where-Object { $_.LastWriteTime -lt $limit } | Remove-Item -Force

最佳答案

使用ForEach-Object和管道实际上应该防止代码耗尽内存。如果您仍然遇到OOM异常,我怀疑您正在代码中做一些事情来抵消这种影响,而您没有告诉我们。

话虽如此,您应该可以使用以下内容清理数据目录:

$limit = (Get-Date).Date.AddMonths(-4)

Get-ChildItem -Path $Path -Recurse -File |
Where-Object { $_.LastWriteTime -lt $limit } |
Remove-Item -Force -WhatIf

确认一切正常后,请删除 -WhatIf开关。

如果您需要文件总数和已删除文件的数量,请添加如下计数器:
$totalcount  = 0
$deletecount = 0

Get-ChildItem -Path $Path -Recurse -File |
ForEach-Object { $totalcount++; $_ } |
Where-Object { $_.LastWriteTime -lt $limit } |
ForEach-Object { $deletecount++; $_ } |
Remove-Item -Force -WhatIf

当您批量处理大量文件时,我不建议将状态信息打印到控制台。输出可能会大大减慢处理速度。如果必须具有该信息,请将其写入日志文件并分别尾随该文件。

关于powershell - 删除大量文件而不会耗尽内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43432060/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com