在PowerShell中查找具有不同文件名的最后修改文件

时间:2019-05-17 10:41:29

标签: powershell

我有一个充满来自不同数据库的SQL备份的文件夹。我需要从每个数据库中隔离上次修改的内容,然后删除其余的内容。

我可以找到所有这些文件的最后一个修改,然后删除其余的,但这会删除其他2个DB的最后一个备份。

$files = Get-ChildItem -Path $path -Recurse |
         Where-Object {-not $_.PsIsContainer}
$keep = 1
if ($files.Count -gt $keep) {
    $files | Sort-Object CreationTime |
        Select-Object -First ($files.Count - $keep) |
        Remove-Item -Force
}

这只会保留最新消息,并删除其余的消息。

如果我有

db1.bak
db1.bak
db1.bak
db2.bak
db2.bak
db2.bak
db3.bak
db3.bak
db3.bak

我如何保留每个的最后修改,然后删除其余的?

1 个答案:

答案 0 :(得分:0)

按名称对文件分组,从每个组中跳过最新文件,然后删除其余文件。

Get-ChildItem -Path $path -Recurse |
    Where-Object {-not $_.PsIsContainer}
    Group-Object Name |
    ForEach-Object {
        $_.Group |
            Sort-Object LastWriteTime -Desc |
            Select-Object -Skip 1 |
            Remove-Item -Force
    }