如何按上次修改日期获取目录顺序中的 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-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;}
我能写出的最短、最甜蜜的方式
ls | sort LastAccessTime -Descending
这些只是这个的别名
Get-ChildItem | Sort-Object LastAccessTime -Descending
我想在一个大目录中搜索一个或几个具有最新修改日期的文件。尝试一些 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"
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;}
我能写出的最短、最甜蜜的方式
ls | sort LastAccessTime -Descending
这些只是这个的别名
Get-ChildItem | Sort-Object LastAccessTime -Descending