【问题标题】:Find the last modified files with different file names in PowerShell在 PowerShell 中查找具有不同文件名的最后修改的文件
【发布时间】:2019-10-04 16:32:45
【问题描述】:

我有一个文件夹,里面装满了来自不同数据库的 SQL 备份。我需要从每个数据库中分离出最后修改的内容并删除其余部分。

我可以找到所有最后修改的并删除其余部分,但这会删除其他 2 个数据库中的最后一个备份。

$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

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

【问题讨论】:

  • Gci -filter db1 。或者一个 hashset @{} 并添加一个 try catch。

标签: powershell


【解决方案1】:

按名称对文件进行分组,跳过每个组中最近的文件,然后删除其余文件。

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
    }

【讨论】:

  • 抱歉应该使我的自我更清楚,文件名称的一个例子是: - pr02_backup_enr_20190515_12256.bak,rnk_pr02_gro_20190515_125256.bak,rnk_pr02_gro_20190515_1017.bak,rnk_pr02_backup_leo_backup_20190516_16129.bak。所以我想我需要先用通配符来命名。
  • @DONALDO 是的,你应该有。无论如何,您可以使用脚本块参数而不是带有Group-Object 的属性名称,例如类似Group-Object { $_.Name.Substring(0,5) }.
猜你喜欢
  • 1970-01-01
  • 2014-07-24
  • 1970-01-01
  • 2012-06-12
  • 1970-01-01
  • 2012-05-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多