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

fre*_*red 16 filesystems powershell powershell-2.0

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

Get-ChildItem 'D:\Temp' | Sort-Object LastWriteTime
Run Code Online (Sandbox Code Playgroud)

我知道我可以-Recurse用来搜索所有目录.但是如何:

  • 限制一些文件

  • 以降序排序

  • 不要列出目录

谢谢你的帮助!

Mar*_*ndl 30

  • 限制一些文件=>管道到 Select-Object -first 10
  • 以降序模式排序=>管道到 Sort-Object LastWriteTime -Descending
  • 不要列出directory => pipe to Where-Object { -not $_.PsIsContainer }

所以要将它们组合在一起,这里有一个读取所有文件的示例,D:\Temp通过LastWriteTime降序对它们进行排序,只选择前10个:

Get-ChildItem -Path 'D:\Temp' | 
    Where-Object { -not $_.PsIsContainer } |
    Sort-Object LastWriteTime -Descending |
    Select-Object -first 10 
Run Code Online (Sandbox Code Playgroud)

  • 通过将 -File 参数添加到 Get-ChildItem 可以消除Where-Object 过滤器。 (2认同)

Kol*_*yon 19

我能用最短、最甜蜜的方式写这篇文章

ls | sort LastAccessTime -Descending
Run Code Online (Sandbox Code Playgroud)

这些只是这个的别名

Get-ChildItem | Sort-Object LastAccessTime -Descending
Run Code Online (Sandbox Code Playgroud)


Bil*_*ore 13

这对我有用:

PS> dir | Sort-Object LastAccessTime 
Run Code Online (Sandbox Code Playgroud)

它与 bash 命令几乎相同:

$ ls -ltr
Run Code Online (Sandbox Code Playgroud)

过滤目录:

PS> dir | Sort-Object LastAccessTime | Out-String -Stream | Select-String -NotMatch "^d"
Run Code Online (Sandbox Code Playgroud)

(就我个人而言,我认为 Microsoft 应该合并“out-string -stream”和“sls”以创建一个名为“out-grep”的新命令,以便 bash 用户可以更正常地使用 powershell,而无需费心定制您的 shell。谁想要键入所有这些垃圾只是为了 grep 命令输出?)

bash 命令将是:

$ ls -ltr | egrep -v "^d"
Run Code Online (Sandbox Code Playgroud)


Jas*_*n S 5

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

以下是一些组合Sort-Object以及Select-Object限制和排序的示例

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

Get-ChildItem -File | Sort-Object -Property LastAccessTime -Descending | Select-Object -First 5
Run Code Online (Sandbox Code Playgroud)

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

Get-ChildItem -File | Sort-Object -Property LastAccessTime | Select-Object -Last 5
Run Code Online (Sandbox Code Playgroud)

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

Get-ChildItem -File | Sort-Object -Property LastAccessTime -Descending | Select-Object -Last 5
Run Code Online (Sandbox Code Playgroud)

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

Get-ChildItem -File | Sort-Object -Property LastAccessTime | Select-Object -First 5
Run Code Online (Sandbox Code Playgroud)

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

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;} 
Run Code Online (Sandbox Code Playgroud)