programing

디렉토리 구조에서 가장 큰 10개의 파일을 찾는 방법

muds 2023. 8. 4. 23:21
반응형

디렉토리 구조에서 가장 큰 10개의 파일을 찾는 방법

디렉토리 구조에서 가장 큰 10개의 파일을 찾으려면 어떻게 해야 합니까?

이 스크립트 사용

Get-ChildItem -re -in * |
  ?{ -not $_.PSIsContainer } |
  sort Length -descending |
  select -first 10

내역:

필터 블록 "?{ -not $_.PSIsContainer }디렉터리를 필터링합니다.정렬 명령은 나머지 모든 항목을 크기별로 내림차순으로 정렬합니다.선택 절은 처음 10개만 허용하므로 가장 큰 10개가 됩니다.

디렉토리에 길이가 없으므로 이 작업은 약간 단순화될 수 있습니다.

gci . -r | sort Length -desc | select fullname -f 10

디렉터리 및 모든 하위 디렉터리(예: 전체 C: 드라이브)에서 가장 큰 파일을 찾고 크기를 알기 쉬운 형식(GB, MB 및 KB)으로 나열하려는 유사한 문제에 대해 블로그에 게시했습니다.다음은 모든 파일을 크기별로 정렬하여 보기 좋게 표시하는 PowerShell 기능입니다.

Get-ChildItem -Path 'C:\somefolder' -Recurse -Force -File |
    Select-Object -Property FullName `
        ,@{Name='SizeGB';Expression={$_.Length / 1GB}} `
        ,@{Name='SizeMB';Expression={$_.Length / 1MB}} `
        ,@{Name='SizeKB';Expression={$_.Length / 1KB}} |
    Sort-Object { $_.SizeKB } -Descending |
    Out-GridView

PowerShell GridView로 출력하면 결과를 쉽게 필터링하고 스크롤할 수 있으므로 편리합니다.이 버전은 PowerShell v3 버전이 더 빠르지만 블로그 게시물에는 PowerShell v2 호환 버전도 더 느립니다.

그리고 물론 상위 10개의 가장 큰 파일만 원하는 경우에는 다음을 추가할 수 있습니다.-First 10Select-Object 호출에 대한 매개 변수입니다.

결과 세트의 약간의 형식 지정에 관심이 있는 경우 출력이 더 좋아 보이는 두 가지 기능이 있습니다.

#Function to get the largest N files on a specific computer's drive
Function Get-LargestFilesOnDrive
{
Param([String]$ComputerName = $env:COMPUTERNAME,[Char]$Drive = 'C', [Int]$Top = 10)
Get-ChildItem -Path \\$ComputerName\$Drive$ -Recurse | Select-Object Name, @{Label='SizeMB'; Expression={"{0:N0}" -f ($_.Length/1MB)}} , DirectoryName,  Length | Sort-Object Length -Descending  | Select-Object Name, DirectoryName, SizeMB -First $Top | Format-Table -AutoSize -Wrap    
}

#Function to get the largest N files on a specific UNC path and its sub-paths
Function Get-LargestFilesOnPath
{
    Param([String]$Path = '.\', [Int]$Top = 10)
    Get-ChildItem -Path $Path -Recurse | Select-Object Name, @{Label='SizeMB'; Expression={"{0:N0}" -f ($_.Length/1MB)}} , DirectoryName,  Length | Sort-Object Length -Descending  | Select-Object Name, DirectoryName, SizeMB -First $Top | Format-Table -AutoSize -Wrap
}

제가 알고 있는 가장 빠른 방법은 다음과 같습니다.

$folder  = "$env:windir" # forder to be scanned
$minSize = 1MB

$stopwatch =  [diagnostics.stopwatch]::StartNew()

$ErrorActionPreference = "silentlyContinue"
$list = New-Object 'Collections.ArrayList'
$files = &robocopy /l "$folder" /s \\localhost\C$\nul /bytes /njh /njs /np /nc /fp /ndl /min:$minSize
foreach($file in $files) {
    $data = $file.split("`t")
    $null = $list.add([tuple]::create([uint64]$data[3], $data[4]))
}

$list.sort() # sort by size ascending
$result = $list.GetRange($list.count-10,10) 
$result | select item2, item1 | sort item1 -Descending

$stopwatch.Stop()
$t = $stopwatch.Elapsed.TotalSeconds
"done in $t sec."

사람이 읽을 수 있는 크기로 파일을 정렬하기 위해 가장 큰 상위 10개의 파일을 로컬 디렉터리에 가져오기 위한 기본적인 방법:

ls -Sh -l |head -n 10

또는 사용할 수 있습니다.

du -ha /home/directory |sort -n -r |head -n 10

언급URL : https://stackoverflow.com/questions/798040/how-do-i-find-the-10-largest-files-in-a-directory-structure

반응형