디렉토리 구조에서 가장 큰 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 10
Select-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
'programing' 카테고리의 다른 글
Android에서 토스트의 위치를 변경하는 방법은 무엇입니까? (0) | 2023.08.04 |
---|---|
스프링 부트 보안 - 우체부가 401을 무단으로 제공합니다. (0) | 2023.08.04 |
웹 API에서 여러 필터를 사용한 실행 순서 (0) | 2023.08.04 |
케라스에서 HDF5 파일에서 모델을 로드하는 방법은 무엇입니까? (0) | 2023.08.04 |
NumberPicker에서 소프트 키보드 사용 (0) | 2023.08.04 |