我想在大目录中搜索一个或几个具有最新修改日期的文件。尝试使用一些PowerShell代码,但它对我来说效果不佳。
Get-ChildItem 'D:\Temp' | Sort-Object LastWriteTime
我知道我可以使用-Recurse
搜索所有目录。但是如何:
限制一些文件
以降序排序
不列出目录
感谢您的帮助!
答案 0 :(得分:20)
Select-Object -first 10
Sort-Object LastWriteTime -Descending
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
答案 1 :(得分:2)
Martin Brandl's answer涵盖了原因,因此我将不再重复,只是在较新的Powershell版本中,您可以使用Get-ChildItem -File
仅列出文件而不列出目录(文件夹)。我不知道它是什么时候引入的,但是它在Powershell 5.1中
以下是结合Sort-Object
和Select-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;}
答案 2 :(得分:1)
这对我有用:
PS> dir | Sort-Object LastAccessTime
它与bash命令几乎相同:
$ ls -ltr
要过滤目录:
PS> $mydir = dir | Sort-Object LastAccessTime
PS> $mydir | out-string -Stream | sls "^d" -NotMatch
(就我个人而言,我认为微软应该合并“ out-string -stream”和“ sls”以创建一个名为“ out-grep”的新命令,以便Powershell对于bash用户更正常地工作,而不会搞乱自定义Shell 。谁想键入所有垃圾内容只是grep命令输出?)
bash命令为:
$ ls -ltr | egrep -v "^d"
答案 3 :(得分:1)
我能写的最短最甜蜜的方式
ls | sort LastAccessTime -Descending
这些只是这个的别名
Get-ChildItem | Sort-Object LastAccessTime -Descending