문제

어떻게 얻을 수 있습니까? -PowerShell을 사용한 분석? 디스크에서 디렉토리의 크기를 정기적으로 확인하고 싶습니다.

다음은 현재 디렉토리의 각 파일의 크기를 제공합니다.

foreach ($o in gci)
{
   Write-output $o.Length
}

그러나 내가 정말로 원하는 것은 하위 디렉토리를 포함하여 디렉토리의 모든 파일의 집계 크기입니다. 또한 선택적으로 크기별로 정렬 할 수 있기를 원합니다.

도움이 되었습니까?

해결책

"아름다운 언어 탐색"블로그에는 구현이 있습니다.

"PowerShell에서 'du -s *'의 구현"

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에 그룹화 한 다음 각 디렉토리에 대한 해당 목록 구축 총을 걸어갑니다 (하위 디렉터 포함).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top