PowerShellを使用して d -ish分析を取得するにはどうすればよいですか?ディスク上のディレクトリのサイズを定期的にチェックしたいのですが。
以下に、現在のディレクトリ内の各ファイルのサイズを示します。
foreach ($o in gci)
{
Write-output $o.Length
}
しかし、私が本当に必要としているのは、サブディレクトリを含む、ディレクトリ内のすべてのファイルの合計サイズです。また、オプションでサイズで並べ替えることができるようにしたいと思います。
「ExploringBeautifulLanguages」ブログで利用可能な実装があります。
function directory-summary($dir=".") {
get-childitem $dir |
% { $f = $_ ;
get-childitem -r $_.FullName |
measure-object -property length -sum |
select @{Name="Name";Expression={$f}},Sum}
}
(ブログ所有者によるコード:Luis Diego Fallas)
出力:
PS C:\ Python25>ディレクトリ-概要 名前の合計 ---- --- DLL 4794012 Doc 4160038 include 382592 Lib 13752327 libs 948600 tcl 3248808 Tools 547784 LICENSE.txt 13817 NEWS.txt 88573 python.exe 24064 pythonw.exe 24576 README.txt 56691 w9xpopen.exe 4608
回答のコマンドを少し変更して、サイズの降順で並べ替え、サイズをMB単位で含めました。
gci . |
%{$f=$_; gci -r $_.FullName |
measure-object -property length -sum |
select @{Name="Name"; Expression={$f}},
@{Name="Sum (MB)";
Expression={"{0:N3}" -f ($_.sum / 1MB) }}, Sum } |
sort Sum -desc |
format-table -Property Name,"Sum (MB)", Sum -autosize
出力:
PS C:\scripts> du
Name Sum (MB) Sum
---- -------- ---
results 101.297 106217913
SysinternalsSuite 56.081 58805079
ALUC 25.473 26710018
dir 11.812 12385690
dir2 3.168 3322298
おそらくそれは最も効率的な方法ではありませんが、機能します。
function Get-DiskUsage ([string]$path=".") {
$groupedList = Get-ChildItem -Recurse -File $path | Group-Object directoryName | select name,@{name='length'; expression={($_.group | Measure-Object -sum length).sum } }
foreach ($dn in $groupedList) {
New-Object psobject -Property @{ directoryName=$dn.name; length=($groupedList | where { $_.name -like "$($dn.name)*" } | Measure-Object -Sum length).sum }
}
}
私のは少し違います。すべてのファイルをdirectorynameでグループ化し、そのリストを調べて、各ディレクトリの合計を作成します(サブディレクトリを含めるため)。