如何按上次修改日期获取目录顺序中的 N 个文件?

How to get N files in a directory order by last modified date?

我想在一个大目录中搜索一个或几个具有最新修改日期的文件。尝试一些 PowerShell 代码,但它对我来说效果不佳。

Get-ChildItem 'D:\Temp' | Sort-Object LastWriteTime

我知道我可以使用 -Recurse 在所有目录中搜索。但是如何:

感谢您的帮助!

  • 仅限制部分文件 => 通过管道传输到 Select-Object -first 10
  • 降序排序 => 管道到 Sort-Object LastWriteTime -Descending
  • 不要列出目录 => 管道到 Where-Object { -not $_.PsIsContainer }

所以为了将它们组合在一起,这里是一个示例,它从 D:\Temp 读取所有文件,按 LastWriteTime 降序排序,select 仅前 10 个:

Get-ChildItem -Force -Recurse -File -Path "C:\Users" -ErrorAction SilentlyContinue | Where-Object { $_.CreationTime.Date -lt (Get-Date).Date } | Sort CreationTime -Descending | Select-Object -First 10 CreationTime,FullName | Format-Table -Wrap 

这对我有用:

PS> dir | Sort-Object LastAccessTime 

和bash命令几乎一样:

$ ls -ltr

要过滤目录:

PS> dir | Sort-Object LastAccessTime | Out-String -Stream | Select-String -NotMatch "^d"

(我个人认为微软应该合并"out-string -stream"和"sls"来创建一个新命令"out-grep",这样powershell对bash 用户而无需自定义您的 shell。谁愿意键入所有这些垃圾只是为了 grep 命令输出?)

bash 命令为:

$ ls -ltr | egrep -v "^d"

涵盖了原因,所以我不会重复,除了在较新的 Powershell 版本中,您可以使用 Get-ChildItem -File 仅列出文件而不列出目录(文件夹)。我不知道它是什么时候引入的,但它是在 Powershell 5.1

下面是结合Sort-ObjectSelect-Object进行限制排序的一些例子

列出当前目录中最近访问的 5 个文件(不是目录),按降序排列

Get-ChildItem -File | Sort-Object -Property LastAccessTime -Descending | Select-Object -First 5

最近访问的 5 个文件,当前目录,按升序排列

Get-ChildItem -File | Sort-Object -Property LastAccessTime | Select-Object -Last 5

列出最旧访问的 5 个文件,当前目录,降序

Get-ChildItem -File | Sort-Object -Property LastAccessTime -Descending | Select-Object -Last 5

列出最旧访问的 5 个文件,当前目录,升序

Get-ChildItem -File | Sort-Object -Property LastAccessTime | Select-Object -First 5

另请注意,您可以根据一些日期时间文件属性进行排序。为一个文件获取所有这些

Get-ChildItem | Get-Member -MemberType Property | Where-Object -Property Definition -Like "datetime*"

   TypeName: System.IO.FileInfo

Name              MemberType Definition                           
----              ---------- ----------                           
CreationTime      Property   datetime CreationTime {get;set;}     
CreationTimeUtc   Property   datetime CreationTimeUtc {get;set;}  
LastAccessTime    Property   datetime LastAccessTime {get;set;}   
LastAccessTimeUtc Property   datetime LastAccessTimeUtc {get;set;}
LastWriteTime     Property   datetime LastWriteTime {get;set;}    
LastWriteTimeUtc  Property   datetime LastWriteTimeUtc {get;set;} 

我能写出的最短、最甜蜜的方式

ls | sort LastAccessTime -Descending

这些只是这个的别名

Get-ChildItem | Sort-Object LastAccessTime -Descending