【问题标题】:powershell keep last 31 filespowershell 保留最后 31 个文件
【发布时间】:2014-05-19 10:51:45
【问题描述】:

我正在使用这个 powershell 命令只保留 31 天前的备份文件。

Get-ChildItem –Path  “d:\Backup\hl” –Recurse | Where-Object{$_.LastWriteTime –lt (Get-Date).AddDays(-31)} | Remove-Item -Force -Recurse

我的问题是,如果每日备份失败并且我检查了备份文件夹,例如一个月后,powershell 脚本将删除所有或大部分备份,因为它们已超过 31 天。

是否可以根据 lastwritetime 更改 powershell 命令以保留最后 31 个文件,但不是因为它们在 31 天内?

谢谢

【问题讨论】:

    标签: powershell backup


    【解决方案1】:

    您可以执行以下操作,我不确定这将如何处理您的递归参数,但假设它工作正常,因此我将其留在示例中:

    Get-ChildItem –Path “d:\Backup\hl” –Recurse | Sort-Object LastWriteTime –Descending | Select-Object -Skip 31 | Remove-Item -Force -Recurse

    【讨论】:

    • 谢谢,我已经用 -whatif 对此进行了测试,它说它将删除 16 个不应该执行的文件夹。有 31 个文件夹,每个文件夹内有 1 个文件。通过运行该命令,理论上应该不会删除任何内容,因为已经有 31 个文件?
    • 我猜问题是 31 个文件夹中的每个文件夹都有 1 个文件?
    • 是的,我想是的。这就是我使用recurse 参数的意思,可能会产生意想不到的结果。查看其他答案,因为他已编辑以排除目录。
    【解决方案2】:

    LastWriteTime 排序并跳过前 31 个文件。当使用-Recurse 时,文件夹名称也会出现在结果中。因此,要保留最后 31 个文件,您需要使用 Where-Object 排除文件夹项,例如:

    Get-ChildItem –Path  “d:\Backup\hl” –Recurse |
    Where-Object { !$_.PSIsContainer } |
    Sort-Object LastWriteTime -Descending |
    Select-Object -Skip 31 |
    Remove-Item -Force -Recurse
    

    【讨论】:

      猜你喜欢
      • 2015-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-25
      • 1970-01-01
      • 1970-01-01
      • 2015-11-16
      • 1970-01-01
      相关资源
      最近更新 更多