Iai*_*ain 6 windows command-line sysinternals
du.exe让您递归地识别占用大量空间的文件夹。例如,以下将显示c:\3 级深度的所有文件夹的大小:
du.exe -l 3 c:\
Run Code Online (Sandbox Code Playgroud)
如何过滤此输出以仅显示 1GB 以上的文件夹?
以下是输出的摘录以du.exe供参考:
Du v1.4 - report directory disk usage
Copyright (C) 2005-2011 Mark Russinovich
Sysinternals - www.sysinternals.com
6,344,864 c:\Windows\winsxs
18,268,671 c:\Windows
483,343,308 c:\
Files: 412125
Directories: 42072
Size: 494,943,548,281 bytes
Size on disk: 487,560,269,896 bytes
Run Code Online (Sandbox Code Playgroud)
正如另一个答案所说,你不能du.exe独自完成。PowerShell 来救援!
.\du.exe -c -l 3 C:\ | ConvertFrom-Csv -Header Size,Path | Where-Object { [int]$_.Size -gt 1048576 } | Sort-Object { [int]$_.Size } -descending
Run Code Online (Sandbox Code Playgroud)
将这个长命令分解为单独的位,每个位都通过管道传输到下一个:
.\du.exe -c -l 3 C:\
Run Code Online (Sandbox Code Playgroud)
这基本上是你开始的,除了-c参数告诉du将输出格式化为 CSV。
ConvertFrom-Csv -Header Size,Path
Run Code Online (Sandbox Code Playgroud)
这将获取 CSV 输出du并将其转换为 PowerShell 哈希表。由于du不提供带有列名的标题,因此必须手动完成。
Where-Object { [int]$_.Size -gt 1048576 }
Run Code Online (Sandbox Code Playgroud)
这将过滤数据,仅返回大小大于 1 GB 的行(du以 KB 为单位返回大小,1 GB = 1048576 KB)。注意这[int]部分,让 PowerShell 知道它正在处理数字数据。
Sort-Object { [int]$_.Size } -descending
Run Code Online (Sandbox Code Playgroud)
这将按大小对数据进行降序排序(再次指定要排序的数据是数字)。当然,这是可选的。
小智 5
在最新的 du.exe 版本中,使用 Powershell ConvertFrom-Csv 附加标头并不能立即使用,因为 du.exe 在列表中附加了它自己的标头。我们需要做的是使用 select 命令选择现有的标题。
du.exe -c -l 3 C:\ | ConvertFrom-Csv | select Path,DirectorySize | Where-Object { [int]$_.DirectorySize -gt 1048576 }
Run Code Online (Sandbox Code Playgroud)
我在之前的du/powershell组合上提供了一个新的变体,只是因为它们都不适用于我的duv1.61,而其他人可能会面临同样的问题。我在使用之前的版本时遇到了一些问题:
du的-nobanner开关需要包含(但没有),这样就ConvertFrom-Csv不会被顶部的横幅阻塞(对我来说,表现为神秘的不可见输出)Cannot convert value "40822284152" to type "System.Int32". Error: "Value was either too large or too small for an Int32."某些行;大概非常大的目录。Where-Object { [int]$_.DirectorySize -gt 1048576 }我不是 powershell 专家,但我已经设法调整前两个变体以提供可行的解决方案:
du -nobanner -c -l 3 \ | ConvertFrom-Csv | select Path,@{Name="DirectorySize";expression={$_.DirectorySize / 1GB }} | Where-Object { $_.DirectorySize -gt 1 } | Sort-Object { $_.DirectorySize } -descending
Run Code Online (Sandbox Code Playgroud)
只是为了咯咯笑,这里有一个不太灵活/不太精确的解决方案,使用du正findstr则表达式:
du -l 3 \ | findstr /R /C:",[0-9][0-9][0-9],[0-9][0-9][0-9] "
Run Code Online (Sandbox Code Playgroud)
这利用了目录1GB将被打印的模式。具体来说,在三位数字之前会有一个额外的前导逗号,然后是另一个逗号,后面跟着另外三位数字。需要尾部两个空格来过滤掉底部打印的总计。注意:此解决方案不像 powershell 解决方案那样按目录大小排序。
| 归档时间: |
|
| 查看次数: |
40748 次 |
| 最近记录: |