使用Powershell删除数百万个日志文件
在旧服务器上,我们有数百万个日志文件。这些日志文件是我们正在运行的集成框架的一部分,该框架从未被清理过。大约有180万个XML日志文件分布在3000多个目录中 文件夹具有以下结构:使用Powershell删除数百万个日志文件,powershell,Powershell,在旧服务器上,我们有数百万个日志文件。这些日志文件是我们正在运行的集成框架的一部分,该框架从未被清理过。大约有180万个XML日志文件分布在3000多个目录中 文件夹具有以下结构: D:\ProgramFiles\\\Environment\\\\XmlLogs\\logname.xml 示例: D:\Program Files\Company\Company Integration 4.5.5\Environment\Company A\GenericEmailer\Release1.0.0.
D:\ProgramFiles\\\Environment\\\\XmlLogs\\logname.xml
示例:
D:\Program Files\Company\Company Integration 4.5.5\Environment\Company A\GenericEmailer\Release1.0.0.I1\XmlLogs\01-01-2014\logname.xml
D:\Program Files\Company\Company Integration 4.5.6\Environment\Company B\GlobalEmailer\Release1.2.3.I2\XmlLogs\01-01-2019\logname.xml
我的计划是搜索所有XmlLogs目录并清空这些目录,但每当我执行Get ChildItem时,整个服务器都会冻结,并且永远不会输出结果
Get ChildItem-目录“D:\Program Files\Company\Company Integration 4.5.6\Environment\Company A\”-递归-名称-包括“XmlLogs”
执行此操作并删除所有日志文件的正确方法是什么 可能您可以尝试这样做(根据需要修改类似内容或使用-match操作符+regex表达式)
注1:要真正删除,必须在我的示例中删除“-whatif”选项
注2:为了获得更好的性能,如果公司名称不变,您可以使用“D:\Program Files\Company”。除非您要保留其他XML文件,否则您可以尝试
Get ChildItem'D:\…\Company A'-Filter*.XML-Recurse-Force
@AnsgarWiechers抱歉,我忘了提到.xml文件也用作配置文件。所以我认为这不管用。无论如何,谢谢你的建议!然后,您需要提供更多用于识别文件的标准。它们总是被命名为“logname.xml”,还是在您的问题中只是一个占位符名称?它们是否总是存储在子文件夹树“XmlLogs\####-##-#####-##”中?听起来像是Get ChildItem
和-Recurse
开关正忙于遍历整个文件夹结构,这可能会影响“旧”服务器上的磁盘性能。您可以尝试添加-Depth 1
,这样它就不需要查看所有的日期子文件夹就可以找到您的“XmlLogs”文件夹(或者可能是-Depth 2
-尝试一下!)
Get-ChildItem "C:\Program Files" -directory -recurse | % {
if ($_.fullname -like '*\XmlLogs\*')
{
Get-ChildItem $_.FullName -Recurse -file -filter "*.xml" | Remove-Item -Force -WhatIf
}
}