PowerShell의 du?
-
22-08-2019 - |
문제
어떻게 얻을 수 있습니까? 듀-PowerShell을 사용한 분석? 디스크에서 디렉토리의 크기를 정기적으로 확인하고 싶습니다.
다음은 현재 디렉토리의 각 파일의 크기를 제공합니다.
foreach ($o in gci)
{
Write-output $o.Length
}
그러나 내가 정말로 원하는 것은 하위 디렉토리를 포함하여 디렉토리의 모든 파일의 집계 크기입니다. 또한 선택적으로 크기별로 정렬 할 수 있기를 원합니다.
해결책
"아름다운 언어 탐색"블로그에는 구현이 있습니다.
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> directory-summary Name Sum ---- --- DLLs 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에 그룹화 한 다음 각 디렉토리에 대한 해당 목록 구축 총을 걸어갑니다 (하위 디렉터 포함).
제휴하지 않습니다 StackOverflow