我经常使用各种shell脚本创建日志/报告文件。这很好,但大部分时间我只需要简单地查看内容 - 通常是在同一天或一周之后。
我想要做的是能够将文件标记为过期,因此在给定的一段时间后,文件将被删除或移动到存档目录。
由于我可以控制文件创建,我当然可以给它一定的扩展名,例如.SEF并写一个服务来定期解析我硬盘上的目录,但这看起来有点笨拙。
我还查看了自定义文件属性:
http://social.msdn.microsoft.com/Forums/en/netfxbcl/thread/173ab6de-3cd8-448f-8c42-de9d2240b913
但是我需要写一些东西来将文件属性添加到文件中。所以在Powershell / SFU或类似的地方:
cat JobOutput.txt | grep -e Error | expire > report.txt
或普通的旧窗户:
type JobOutput.txt | findstr Error | expire > report.txt
有没有人像这样远程做过什么?
修改
我上面所描述的仅仅是我想做的事情的一个方面。例如,您可能希望发送一封需要在时间限制内响应的电子邮件,然后在此之后删除。
另一个示例可能是您发布的文档,其中包含您在一段时间后不想使用的临时系统解决方法的详细信息。
我们当然要进入各种应用程序的变幻莫测,但自定义文件属性的想法看起来很有前途和吸引力。问题当然是它们如何应用于每种文件类型......
现在,我很乐意根据我最初提出的问题来解决这个问题,在这种情况下,我可以定义一个自定义扩展程序,它会被预定的作业清除。
解决方案:
好的,我决定采用Powershell解决方案(略微调整),因为我非常熟悉它:
$HowManyDays = 15
$LastWrite = (Get-Date).AddDays(-$HowManyDays)
Get-ChildItem -recurse -include *.sef |
Where {$_.LastWriteTime -le "$LastWrite"} |
Remove-Item
非常感谢你对此的帮助。
答案 0 :(得分:1)
如果您对Alex K.提供的内容相当满意,那么调整应该很容易。
创建一个cmd文件,当你调用它时,传入文件搜索模式,如果那样*.*
那么就是这样。
在cmd文件中调用:
robocopy "c:\from" "c:\to" /s %1 /MINAGE:7 /MOV
答案 1 :(得分:0)
我们在通过任务计划程序安排的Powershell中使用一个小脚本来删除超过15天的日志。
您可以删除文件或移动它们。这是脚本:
$HowManyDays = 15
$LastWrite = (Get-Date).AddDays(-$HowManyDays)
Get-ChildItem *.log |
Where {$_.LastWriteTime -le "$LastWrite"} |
Remove-Item
答案 2 :(得分:0)
我也会去预定的调用。
如果您不想调用Powershell或下载robocopy,您可以坚持使用命令行单行:
forfiles /p "C:\Path" /m *.log /d -7 /c "cmd /c del @file"
我将其调整并烘焙成批处理,我可以安排清理任何文件夹+子文件夹。仅供参考,这将为您提供以下内容:
forfiles /p "C:\Path" /m *.* /d -7 /c "cmd /c if [@isdir]==[TRUE] rmdir @file /s /q"
答案 3 :(得分:0)
您有两个问题: 1.如何指出哪些文件应该“到期”。 2.如何(快速)找到过期的文件。
对于1,您需要确定文件扩展名是否是可接受的方法,或者您是否需要使用某些自定义文件属性,以及它是存储在NTFS文件系统中还是嵌入在文件内容中。
对于2,您可以使用例如locate32创建索引,但这只允许您根据扩展名快速查找文件;自定义属性已经输出 - 除非您想要获取locate32的源并添加索引自定义属性的功能。它可能非常有用(例如,带有自定义属性的Word文档或DLL中的版本)。 另一种索引方法是在“待过期”目录中创建符合过期文件的符号链接。
实际删除很简单,您可以使用此处发布的任何解决方案;使用索引可以更快地找到过期的文件。