2009-04-28 31 views

Trả lời

33

Hãy thử kịch bản này

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

Breakdown:

Khối lọc "?{ -not $_.PSIsContainer }" có nghĩa là để lọc ra các thư mục. Lệnh sắp xếp sẽ sắp xếp tất cả các mục còn lại theo kích thước theo thứ tự giảm dần. Mệnh đề select sẽ chỉ cho phép người đầu tiên 10 qua vì vậy nó sẽ là lớn nhất 10

+0

Thật tuyệt vời ---- Tôi đã tìm ra cách định dạng kết quả cuối cùng bằng cách sử dụng định dạng bảng nhưng những gì tôi "không rõ ràng là cú pháp? {} và $ _ Tôi đoán đây là những shortforms cho một số câu lệnh xây dựng? –

+2

Cú pháp? {} là viết tắt của where-obj ect là biểu thức lọc. Về cơ bản, powerhell sẽ chuyển mọi đối tượng đến mệnh đề {} trong từ $ _. Nếu trả về là $ true, thì đối tượng sẽ tiếp tục xuống đường ống, nếu không nó sẽ được lọc ra. – JaredPar

+1

đây là bộ nhớ chuyên sâu lệnh và propotional đến kích thước của nội dung được tìm kiếm tôi đoán. – Ankush

1

Trên Linux:

ls -XS | head -n 10 

EDIT: Oh, bây giờ tôi thấy thẻ "powershell", xin lỗi vì câu trả lời vô ích của tôi ;)

+0

Anh ấy yêu cầu một mẫu quyền hạn – JaredPar

+0

Có, nhưng anh ấy chỉ thêm thẻ "powershell" sau, hoặc tôi chưa thấy thẻ đó tại thời điểm đăng câu trả lời của tôi :) – akappa

+2

Về mặt tươi sáng, ls là bí danh Nhận -ChildItem trong PowerShell :) – mortenya

30

Điều này có thể được đơn giản hóa một chút vì Thư mục không có chiều dài:

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

+1 Tôi sẽ sử dụng điều này trong tương lai (ít đánh máy hơn). –

+2

Cộng với '.' thậm chí không cần thiết.Có thể đơn giản hóa phần trước đó thành "gci -r | ..." vì đường dẫn mặc định là thư mục hiện tại. –

0

Nếu bạn quan tâm đến một chút định dạng của kết quả-set, đây là hai chức năng với đầu ra càng đẹp thì:

#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 
} 
+0

Dường như nó không trả lời được câu hỏi gốc. –

3

Tôi đã blogged about a similar problem nơi tôi muốn tìm các tập tin lớn nhất trong một thư mục và tất cả các thư mục con (toàn bộ ổ C: chẳng hạn), cũng như danh sách kích thước của họ trong một thoải mái dễ hiểu định dạng (GB , MB và KB). Dưới đây là các chức năng PowerShell tôi sử dụng danh sách tất cả các file được sắp xếp theo kích thước trong một đẹp ngoài GridView:

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 

Xuất ra vào gridview này là tốt đẹp vì nó cho phép bạn dễ dàng lọc các kết quả và di chuyển qua chúng. Đây là phiên bản PowerShell v3 nhanh hơn, nhưng bài đăng trên blog cũng hiển thị phiên bản tương thích PowerShell v2 chậm hơn.

Và tất nhiên nếu bạn chỉ muốn 10 tệp lớn nhất hàng đầu, bạn chỉ có thể thêm thông số -First 10 vào cuộc gọi Chọn đối tượng.

-1

Một cơ bản để có được 10 tác phẩm lớn nhất trên vào thư mục địa phương:

ls -S -l | head -n 10

hoặc bạn có thể sử dụng

du -a/home/thư mục | sort -n -r | head -n 10

Các vấn đề liên quan