powershell - 如果最新的文件大小不太小,请删除旧的备份文件

标签 powershell backup delete-file

我正在尝试创建一个 powershell 脚本来安排备份删除,以便 HDD 不会变满。

  • 我想要做的是验证哪个文件是最新的
  • 然后我想检查文件大小与第二个最新文件的差异是否不超过 10%。
  • 如果文件大小在大小范围内,则删除除最新文件之外的所有文件。
  • 如果文件大小小于或大于第二个最新文件的 10%,则删除除最新文件和第二个最新文件之外的所有文件。

我希望你们能帮我弄清楚我应该如何编写代码以使其发挥作用。

我从下面开始删除所有超过 2 天的文件,但我不太确定如何更改它以保留最新文件而不取决于天数。

$Path = "C:\Temp\Backup\Folder1\"
$Days = 2
$Date = Get-Date
$Include = "*.gpg"
$Exclude = "*.txt"

Get-ChildItem $Path -Recurse |
Where-Object {-not $_.PSIsContainer -and $Date.Subtract($_.CreationTime).Days -gt $Days } |
Remove-Item -WhatIf

最佳答案

你可以这样做:

$BackupFiles = Get-ChildItem -File | Sort-Object LastWriteTime -Descending

$LatestBackup = $BackupFiles | Select -First 1
$PrevBackup = $BackupFiles | Select -Skip 1 -First 1

$BackupSizeThreshold = $PrevBackup.Length * 0.1


$FilesToRemove = If ($LatestBackup.Length -le ($PrevBackup.Length + $BackupSizeThreshold) -and $LatestBackup.Length -ge ($PrevBackup.Length - $BackupSizeThreshold)) {
    $BackupFiles | Select -Skip 1
}
Else {
    $BackupFiles | Select -Skip 2
}

$FilesToRemove | Remove-Item -WhatIf

如果您看到了预期的结果,请删除 -WhatIf

关于powershell - 如果最新的文件大小不太小,请删除旧的备份文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55044820/

相关文章:

iis-7 - Powershell IIS7 管理单元将 SSL 证书分配给 https 绑定(bind)

azure - 如何将 Azure 函数应用程序中作为对 powershell Web 请求的响应收到的文件保存到 Azure 存储容器?

.net - 使用Powershell发布云服务-保留IP问题

sql-server - 将 .bak mssql 2005 恢复到新的 mssql 2008r2 服务器

bash - 在 cron 作业中使用 $(date "+%Y-%m-%d_%H:%M:%S") 有什么问题?

linux - 删除超过 3 年的文件

azure - 在 Azure Devops 中使用 powershell 自动化 Connect-AzureAD

linux - 如何从 POP3 服务器下载 60 万封电子邮件

java - FTP/数据库连接期间删除文件失败

PHP 删除完整文件夹