Bash / DOS / PowerShell脚本列出最新版本的文件?
发布时间:2020-12-15 17:03:01 所属栏目:安全 来源:网络整理
导读:我们有一个(比方说50个)报告列表,这些报告会根据特定条件转储到各种文件夹中.所有报告都有标准名称,例如. D099C.LIS,D18A0.LIS等 有时报告最多可以存在于5个不同的位置,我需要生成每个报告的最新版本的所有位置的列表. 我可以轻松地使用代码,或者将“dir”或
我们有一个(比方说50个)报告列表,这些报告会根据特定条件转储到各种文件夹中.所有报告都有标准名称,例如. D099C.LIS,D18A0.LIS等
有时报告最多可以存在于5个不同的位置,我需要生成每个报告的最新版本的所有位置的列表. 我可以轻松地使用代码,或者将“dir”或“ls”输出重定向到文本文件然后在Excel中操作它,但我更喜欢使用DOS,bash,更简单(希望是单行)解决方案.或PowerShell. 到目前为止我在PowerShell中提出的最好的(我使用bash做过类似的事情)是: ls -r -fi *.lis | sort @{expression={$_.Name}},@{expression={$_.LastWriteTime};Descending=$true} | select Directory,Name,lastwritetime 这将以递归方式列出所有带有* .lis扩展名的文件,然后按名称(asc)和日期(desc)对其进行排序,然后显示目录,名称和日期. 这给出了这种输出: C:reportsLESE D057A.LIS 28/01/2009 09:00:43 C:reportsJCSW D057A.LIS 27/01/2009 10:50:21 C:reportsALID D075A.LIS 04/02/2009 12:34:12 C:reportsJCSW D075B.LIS 05/02/2009 10:07:15 C:reportsALID D075B.LIS 30/01/2009 09:14:57 C:reportsBMA3 D081A.LIS 01/09/2008 14:51:36 我现在显然需要做的是删除不是最新版本的文件,以便输出看起来像这样(不太担心格式化): C:reportsLESE D057A.LIS 28/01/2009 09:00:43 C:reportsJCSW D075B.LIS 05/02/2009 10:07:15 C:reportsBMA3 D081A.LIS 01/09/2008 14:51:36 有人有主意吗? [编辑] 庆典: ls -lR --time-style=long-iso | awk 'BEGIN{OFS="t"}{print $5,$6,$7,$8}' | grep ".LIS" | sort -k4 -k2r -k3r | uniq -f3 ls -lR --time-style=long-iso | awk 'BEGIN{OFS="t"}{print $5,$8}' | grep ".LIS" | sort -k4 -k2r -k3r | awk '!x[$4]++' 电源外壳: ls -r -fi *.lis | sort @{expression={$_.Name}},lastwritetime | Group-Object Name | %{$_.Group | Select -first 1} ls -r . *.lis | sort -desc LastWriteTime | group Name | %{$_.Group[0]} | ft Directory,LastWriteTime ls -r -fi *.lis | sort @{expression={$_.Name}},@{expression={$_.LastWriteTime};Descending=$true} | unique | ft Directory,LastWriteTime ls -r -fi *.lis | sort @{expression={$_.Name}},lastwritetime | Group-Object Name | %{$_.Group | Select -first 1} (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |