PowerShell을 사용하여 특정 디렉토리의 크기를 정확하게 얻는 방법

PowerShell은 Windows용 강력한 자동화 도구이며, 파일 시스템 관리에 매우 유용합니다. 특히 디렉토리의 크기를 얻는 것과 관련하여 GUI를 사용하는 것보다 훨씬 더 상세하고 유연한 정보를 제공합니다. 이 글은 기본 명령어 사용, 크기 단위 변환, 하위 디렉토리를 포함한 총 크기 얻기에 이르기까지 PowerShell을 사용하여 디렉토리의 크기를 얻는 방법을 단계별로 소개합니다.

목차

기본 명령어 사용

PowerShell에서 디렉토리의 크기를 얻는 가장 기본적인 방법은 Get-ChildItem 명령어와 Measure-Object 명령어를 결합하는 것입니다. 이 조합을 통해 지정된 디렉토리 내의 전체 파일 크기를 계산할 수 있습니다.

특정 디렉토리(여기서는 “C:\ExampleDirectory”)의 크기를 얻기 위한 예제 명령어입니다.

Get-ChildItem C:\ExampleDirectory -Recurse | Measure-Object -Property Length -Sum
  • Get-ChildItem C:\ExampleDirectory -Recurse: 지정된 디렉토리와 그 하위 디렉토리 내의 모든 항목을 나열합니다.
  • Measure-Object -Property Length -Sum: 나열된 파일의 크기(Length 속성)를 합산합니다.

이 명령은 지정된 디렉토리 내의 모든 파일의 총 크기를 바이트 단위로 반환합니다. 그러나 이 방법은 디렉토리 자체의 크기는 포함하지 않으며 크기 단위를 변환하지도 않습니다. 다음 섹션에서는 크기 단위를 변환하는 방법을 설명합니다.

크기 단위 변환

PowerShell에서 얻은 디렉토리 크기는 기본적으로 바이트 단위입니다. 이를 KB, MB 또는 GB와 같은 더 읽기 쉬운 형식으로 변환하려면 계산을 수행해야 합니다. 아래 스크립트는 크기 단위를 가장 적합한 형식으로 자동 변환하고 값을 표시하는 방법을 보여줍니다.

# 특정 디렉토리의 크기를 얻기
$sizeBytes = (Get-ChildItem C:\ExampleDirectory -Recurse | Measure-Object -Property Length -Sum).Sum
# 단위 변환 함수
function Convert-Size($bytes) {
    if ($bytes -gt 1GB) {
        "{0:N2} GB" -f ($bytes / 1GB)
    } elseif ($bytes -gt 1MB) {
        "{0:N2} MB" -f ($bytes / 1MB)
    } elseif ($bytes -gt 1KB) {
        "{0:N2} KB" -f ($bytes / 1KB)
    } else {
        "{0} Bytes" -f $bytes
    }
}
# 결과 표시
$convertedSize = Convert-Size -bytes $sizeBytes
Write-Output "C:\ExampleDirectory의 총 크기는 $convertedSize입니다"

이 스크립트는 먼저 Get-ChildItemMeasure-Object를 사용하여 디렉토리의 총 크기를 바이트 단위로 얻습니다. 그런 다음 이 크기를 Convert-Size 함수에 전달하여 읽기 쉬운 단위로 변환합니다. 이 함수는 주어진 크기가 GB, MB, 또는 KB 중 어느 것에 가장 적합한지를 결정하고 해당 단위로 크기를 형식화합니다. 마지막으로 변환된 크기를 포함한 메시지가 출력됩니다.

이 방법을 사용하면 큰 파일 크기에 대해서도 이해하기 쉬운 형식으로 결과를 얻을 수 있습니다.

하위 디렉토리를 포함한 총 크기 얻기

PowerShell을 사용하여 특정 디렉토리의 크기를 얻을 때는 그 디렉토리 내에 포함된 하위 디렉토리의 크기도 함께 계산하는 것이 종종 중요합니다. 이 총 크기 계산은 서버 저장소 관리나 데이터 조직에 도움이 될 수 있습니다. 다음 단계와 코드 스니펫은 하위 디렉토리를 포함한 디렉토리의 총 크기를 얻는 방법을 보여줍니다.

# 대상 디렉토리
$directoryPath = "C:\ExampleDirectory";
# 디렉토리 크기 계산
$directorySize = Get-ChildItem $directoryPath -Recurse | Where-Object { -not $_.PSIsContainer } | Measure-Object -Property Length -Sum -ErrorAction SilentlyContinue
# 크기 단위 변환
function Convert-Size($bytes) {
    switch ($bytes) {
        { $_ -gt 1GB } { "{0:N2} GB" -f ($bytes / 1GB); break }
        { $_ -gt 1MB } { "{0:N2} MB" -f ($bytes / 1MB); break }
        { $_ -gt 1KB } { "{0:N2} KB" -f ($bytes / 1KB); break }
        Default { "$bytes Bytes" }
    }
}
# 결과 표시
$convertedSize = Convert-Size -bytes $directorySize.Sum
Write-Output "$directoryPath의 총 크기는 $convertedSize입니다"

이 스크립트는 먼저 Get-ChildItem 명령어를 사용하여 지정된 디렉토리의 모든 파일과 하위 디렉토리를 재귀적으로 나열합니다. 그런 다음 Where-Object cmdlet을 사용하여 파일만을 필터링하고 Measure-Object로 그들의 총 크기를 계산합니다. 접근 권한 부족과 같은 이유로 오류가 발생하는 경우 스크립트가 중단되지 않도록 -ErrorAction SilentlyContinue 매개변수가 사용됩니다.

다음으로, 앞서 언급한 Convert-Size 함수를 사용하여 바이트 단위로 얻은 총 크기를 더 읽기 쉬운 형식으로 변환합니다. 마지막으로, 디렉토리의 경로와 변환된 크기가 출력되어 총 크기를 명확하게 표시합니다.

이 방법을 사용하면 대규모 데이터 세트나 수많은 하위 디렉토리를 포함하는 디렉토리의 총 크기를 쉽게 이해할 수 있습니다.

특정 파일 유형의 크기 계산

특정 파일 유형의 크기를 계산하는 것은 데이터를 조직하거나 저장소를 최적화하는 데 도움이 될 수 있습니다. 예를 들어, 로그 파일이나 이미지 파일은 상당한 저장 공간을 차지할 수 있으며, 이러한 파일의 크기를 알면 불필요한 파일을 삭제하거나 보관할지 고려하는 데 도움이 될 수 있습니다. 아래는 PowerShell을 사용하여 특정 파일 유형(예: “.log” 파일)의 총 크기를 계산하는 방법입니다.

# 대상 디렉토리
$directoryPath = "C:\ExampleDirectory";
# 대상 파일 유형
$fileExtension = "*.log";
# 파일 유형 크기 계산
$fileSize = Get-ChildItem $directoryPath -Filter $fileExtension -Recurse | Measure-Object -Property Length -Sum -ErrorAction SilentlyContinue
# 크기 변환 함수
function Convert-Size($bytes) {
    switch ($bytes) {
        { $_ -gt 1GB } { "{0:N2} GB" -f ($bytes / 1GB); break }
        { $_ -gt 1MB } { "{0:N2} MB" -f ($bytes / 1MB); break }
        { $_ -gt 1KB } { "{0:N2} KB" -f ($bytes / 1KB); break }
        Default { "$bytes Bytes" }
    }
}
# 결과 표시
$convertedSize = Convert-Size -bytes $fileSize.Sum
Write-Output "$directoryPath에 있는 $fileExtension 파일의 총 크기는 $convertedSize입니다"

이 코드는 Get-ChildItem cmdlet을 사용하여 지정된 확장자를 가진 파일을 재귀적으로 검색합니다. -Filter 매개변수는 특정 유형의 파일만 대상으로 하도록 보장합니다. 그런 다음 Measure-Object cmdlet을 사용하여 이러한 파일의 총 크기를 계산하고, 앞서 언급한 Convert-Size 함수에 의해 읽기 쉬운 단위로 변환됩니다.

이 방법을 사용하면 저장소에서 특정 파일 유형이 차지하는 공간을 정확하게 이해하고 저장 관리 결정을 내릴 수 있습니다.

결과를 파일로 출력하기

디렉토리 크기 분석 결과를 파일로 저장하는 것은 보고서 생성이나 차후 참조를 위해 유용할 수 있습니다. 이 섹션은 PowerShell을 사용하여 얻은 디렉토리 크기 정보를 텍스트 또는 CSV 파일로 출력하는 방법을 소개합니다. 이를 통해 데이터를 시각화하고 공유하기 쉬워집니다.

텍스트 파일로 출력하기

# 대상 디렉토리
$directoryPath = "C:\ExampleDirectory";
# 출력 파일 경로
$outputFilePath = "C:\directorySizeReport.txt";
# 디렉토리 크기 얻기
$sizeBytes = (Get-ChildItem $directoryPath -Recurse | Measure-Object -Property Length -Sum).Sum
# 크기 단위 변환
$convertedSize = Convert-Size -bytes $sizeBytes
# 결과를 파일에 쓰기
"Total size of $directoryPath is $convertedSize" | Out-File $outputFilePath

CSV 파일로 출력하기

여러 디렉토리의 크기를 비교하고 싶을 때 CSV 파일로 출력하는 것이 특히 유용합니다. 아래 예제는 여러 디렉토리의 크기를 계산하고 각 결과를 CSV 파일에 저장합니다.

# 대상 디렉토리 목록
$directoryPaths = @("C:\ExampleDirectory", "D:\AnotherDirectory");
# 출력 CSV 파일 경로
$outputCsvPath = "C:\directorySizeReport.csv";
# 결과 배열 초기화
$results = @()

foreach ($path in $directoryPaths) {
    $sizeBytes = (Get-ChildItem $path -Recurse | Measure-Object -Property Length -Sum).Sum
    $convertedSize = Convert-Size -bytes $sizeBytes
    $results += [PSCustomObject]@{
        "Directory" = $path
        "Size" = $convertedSize
    }
}

# 결과를 CSV로 출력
$results | Export-Csv $outputCsvPath -NoTypeInformation

이 스크립트를 사용하면 디렉토리 크기 분석 결과를 문서화하고 저장하는 것이 쉬워집니다. 텍스트 또는 CSV 파일로 출력하는 기능은 관리 작업의 투명성을 높이고 미래의 데이터 분석이나 보고서 생성을 지원합니다.

응용: 스크립트를 사용하여 정기적으로 디렉토리 크기를 모니터링하는 방법

디렉토리의 크기를 정기적으로 모니터링하는 것은 갑작스러운 데이터 증가를 조기에 감지하고 저장소 용량 문제를 방지하는 데 중요합니다. PowerShell 스크립트와 예약된 작업을 결합함으로써, 이 과정을 자동화할 수 있습니다. 아래는 정기적으로 디렉토리 크기를 모니터링하고 지정된 크기를 초과하면 경고를 발생시키는 스크립트를 생성하는 방법입니다.

1단계: PowerShell 스크립트 생성

먼저, 디렉토리의 크기를 확인하고 특정 임계값을 초과하면 경고를 발생시키는 PowerShell 스크립트를 생성합니다.

# 대상 디렉토리와 임계값 설정
$directoryPath = "C:\ExampleDirectory";
$thresholdSizeGB = 10

# 디렉

토리 크기를 가져와서 임계값과 비교
$sizeBytes = (Get-ChildItem $directoryPath -Recurse | Measure-Object -Property Length -Sum).Sum
$sizeGB = $sizeBytes / 1GB

if ($sizeGB -gt $thresholdSizeGB) {
    Write-Warning "경고: $directoryPath의 크기가 $thresholdSizeGB GB의 임계값을 초과했습니다. 현재 크기는 $sizeGB GB입니다.";
}

2단계: 스크립트를 예약된 작업에 추가하기

다음으로, 생성한 스크립트를 Windows 예약된 작업에 추가하여 정기적으로 실행되도록 합니다.

  1. “작업 스케줄러”를 열고 “기본 작업 생성”을 선택합니다.
  2. 작업에 이름과 설명을 부여합니다.
  3. 트리거를 설정하여 스크립트가 얼마나 자주 실행될지 결정합니다(예: 매일, 매주).
  4. “작업” 단계에서 “프로그램 시작”을 선택하고 PowerShell 스크립트의 경로를 지정합니다.
  5. 필요에 따라 다른 설정을 조정하고 작업을 저장합니다.

이렇게 하면 지정된 디렉토리의 크기가 설정된 임계값을 초과하면 자동으로 경고가 발생합니다. 이를 통해 갑작스러운 데이터 증가나 예상치 못한 용량 부족을 조기에 감지하고 적절한 조치를 취할 수 있습니다.

요약

PowerShell을 활용하면 특정 디렉토리의 크기를 정확하게 측정하고 그 데이터를 기반으로 저장 관리 및 모니터링을 수행할 수 있습니다. 이 글은 기본 명령어 사용, 크기 단위 변환, 하위 디렉토리를 포함한 총 크기 계산, 특정 파일 유형의 크기 계산, 결과를 파일로 출력하기, 스크립트를 사용하여 정기적으로 디렉토리 크기를 모니터링하는 다양한 기법을 소개했습니다. 이러한 방법들을 적절히 결합함으로써, 더 효율적인 데이터 관리를 달성할 수 있습니다. PowerShell은 데이터 증가와 관련된 도전을 해결하는 데 있어 강력한 도구로 다시 한번 입증되었습니다.

목차