2009-04-28 96 views

回答

33

试试这个脚本

gci -re -in * | 
    ?{ -not $_.PSIsContainer } | 
    sort Length -descending | 
    select -first 10 

击穿:

的过滤块 “?{ -not $_.PSIsContainer }” 指的是过滤掉的目录。排序命令将按降序排列所有剩余的条目。 SELECT子句将只允许前10个通过,因此将成为最大的10

+0

这太好了----我想出了如何使用format-table格式化最终结果,但是我没有清楚的是语法?{}和$ _我猜这些是一些语句结构的缩写? – 2009-04-28 14:20:26

+2

?{}语法是where-obj的简写这是一个过滤器表达式。本质上,PowerShell会将每个对象都传递给$ _中的?{}子句。如果返回值为$ true,则该对象将继续沿着管道向下,否则将被过滤掉。 – JaredPar 2009-04-28 14:28:13

+1

这是内存密集型的命令,并且我猜想正在搜索内容的大小。 – Ankush 2012-06-11 10:56:39

1

在Linux上:

ls -XS | head -n 10 

编辑:哦,现在我看到了标签“的PowerShell”,对不起我的无用的答案;)

+0

他要求提供powershell示例 – JaredPar 2009-04-28 14:03:36

+0

是的,但是或者他稍后会添加“powershell”标记,或者在发布我的答案时我没有看到它:) – akappa 2009-04-28 14:21:10

+2

在光明的一面,ls是Get的别名 - PowerShell中的-ChildItem :) – mortenya 2015-04-25 00:02:32

30

这可以简化一点,因为目录没有长度:

gci . -r | sort Length -desc | select fullname -f 10 
+0

+1我将来会使用它(少打字)。 – 2009-05-02 01:38:42

+2

加'。'甚至不需要。由于默认路径是当前目录,因此可以将前面部分简化为“gci -r | ...”。 – 2009-05-02 06:02:30

0

如果你关心了一下结果集的格式,这里有更好看的输出两个功能:

#Function to get the largest N files on a specific computer's drive 
Function Get-LargestFilesOnDrive 
{ 
Param([String]$ComputerName = $env:COMPUTERNAME,[Char]$Drive = 'C', [Int]$Top = 10) 
Get-ChildItem -Path \\$ComputerName\$Drive$ -Recurse | Select-Object Name, @{Label='SizeMB'; Expression={"{0:N0}" -f ($_.Length/1MB)}} , DirectoryName, Length | Sort-Object Length -Descending | Select-Object Name, DirectoryName, SizeMB -First $Top | Format-Table -AutoSize -Wrap  
} 

#Function to get the largest N files on a specific UNC path and its sub-paths 
Function Get-LargestFilesOnPath 
{ 
    Param([String]$Path = '.\', [Int]$Top = 10) 
    Get-ChildItem -Path $Path -Recurse | Select-Object Name, @{Label='SizeMB'; Expression={"{0:N0}" -f ($_.Length/1MB)}} , DirectoryName, Length | Sort-Object Length -Descending | Select-Object Name, DirectoryName, SizeMB -First $Top | Format-Table -AutoSize -Wrap 
} 
+0

似乎它不回答原来的问题。 – 2014-03-14 13:06:17

3

我已经blogged about a similar problem,我想找到一个目录中的最大文件和所有子目录:在一个不错的易于理解的格式(整个C盘为例),以及名单大小(GB ,MB和KB)。这里的PowerShell的功能我用列出所有文件在一个不错的出GridView的排序按大小:

Get-ChildItem -Path 'C:\SomeFolder' -Recurse -Force -File 
     | Select-Object -Property FullName 
      ,@{Name='SizeGB';Expression={$_.Length/1GB}} 
      ,@{Name='SizeMB';Expression={$_.Length/1MB}} 
      ,@{Name='SizeKB';Expression={$_.Length/1KB}} 
     | Sort-Object { $_.SizeKB } -Descending 
     | Out-GridView 

输出到GridView的是不错的,因为它可以让您轻松地过滤结果,并通过滚动。这是更快的PowerShell v3版本,但博客文章还显示了较慢的PowerShell v2兼容版本。

当然,如果你只想要前10个最大的文件,你可以添加一个-First 10参数给Select-Object调用。

-1

基本一个获得前10名最大的文件到本地目录:

LS -S -l |头-n 10

,或者您可以使用

杜-a /家/ directory | sort -n -r | head -n 10

相关问题