特定の条件に応じてさまざまなフォルダーにダンプされる (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:\reports\LESE D057A.LIS 28/01/2009 09:00:43
C:\reports\JCSW D057A.LIS 27/01/2009 10:50:21
C:\reports\ALID D075A.LIS 04/02/2009 12:34:12
C:\reports\JCSW D075B.LIS 05/02/2009 10:07:15
C:\reports\ALID D075B.LIS 30/01/2009 09:14:57
C:\reports\BMA3 D081A.LIS 01/09/2008 14:51:36
私が今やるべきことは、最新バージョンではないファイルを削除して、出力が次のようになるようにすることです (フォーマットについてはまだあまり心配していません)。
C:\reports\LESE D057A.LIS 28/01/2009 09:00:43
C:\reports\JCSW D075B.LIS 05/02/2009 10:07:15
C:\reports\BMA3 D081A.LIS 01/09/2008 14:51:36
誰にもアイデアはありますか?
[編集] この質問に対するいくつかの良いアイデアと回答。残念ながら、すべてを承認済みとしてマークすることはできませんが、EBGreen の (編集された) 回答は変更なしで機能しました。それらを確認しながら、ここに実用的なソリューションを追加します。
バッシュ:
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,$6,$7,$8}' | grep ".LIS" | sort -k4 -k2r -k3r | awk '!x[$4]++'
パワーシェル:
ls -r -fi *.lis | sort @{expression={$_.Name}}, @{expression={$_.LastWriteTime};Descending=$true} | select Directory, Name, lastwritetime | Group-Object Name | %{$_.Group | Select -first 1}
ls -r . *.lis | sort -desc LastWriteTime | group Name | %{$_.Group[0]} | ft Directory,Name,LastWriteTime
ls -r -fi *.lis | sort @{expression={$_.Name}}, @{expression={$_.LastWriteTime};Descending=$true} | unique | ft Directory,Name,LastWriteTime