【问题标题】:Delete old backup files if the newest file size isn't to small如果最新的文件大小不是太小,请删除旧的备份文件
【发布时间】:2019-03-07 13:20:20
【问题描述】:

我正在尝试创建一个 powershellscript 来安排备份删除,这样硬盘就不会被填满。

  • 我要做的是验证哪个文件是最新的
  • 之后我想检查文件大小与第二个最新文件的差异是否不超过 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

【问题讨论】:

  • 你可以给$date添加负数,就像$Date.AddDays(-2)一样

标签: powershell backup delete-file


【解决方案1】:

你可以这样做:

$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

【讨论】:

  • 非常感谢。就一个问题。我试图在 Get-ChildItem 添加 -Exclude *.txt 但是当我这样做时代码停止工作。我想从 de 文件夹中排除一些文件。
  • 这很奇怪,-Exclude-File 一起使用时似乎不起作用。您有两个选择,通过| Where-Object {$_.name -notlike '*.txt'} 排除您的文件或在Get-ChildItem 上使用-Exclude,如果您还需要排除文件夹,请使用| Where-Object {-not $_.PSIsContainer}。如果您的备份文件夹中没有子文件夹,您显然不必担心,您可以直接使用 -File 并使用 -Exclude
  • 或者这提供了另一种解决方案:stackoverflow.com/questions/43191453/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多