2009-04-28 14 views

risposta

33

Prova questo script

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

Ripartizione:

Il blocco filtro "?{ -not $_.PSIsContainer }" è destinato a filtrare le directory. Il comando sort ordinerà tutte le voci rimanenti per dimensione in ordine decrescente. La clausola SELECT permette solo il primo 10 attraverso in modo che sarà il più grande 10.

+0

Questo è fantastico ---- Ho capito come formattare il risultato finale usando la tabella dei formati ma quello su cui non sono chiaro è la sintassi? {} e $ _ Immagino che si tratti di shortforms per qualche costrutto statement? –

+2

La sintassi? {} è l'abbreviazione di where-obj ect che è un'espressione di filtro. In sostanza powershell passerà ogni oggetto alla clausola? {} Nel da from $ _. Se il rendimento è $ true, l'oggetto continuerà lungo la pipeline, altrimenti verrà filtrato. – JaredPar

+1

questo è un comando di memoria intensivo e proporzionale alla dimensione del contenuto che si sta cercando, credo. – Ankush

1

Su Linux:

ls -XS | head -n 10 

EDIT: Oh, ora vedo il tag "powershell", dispiace per la mia risposta inutile ;)

+0

Ha chiesto un campione Power Shell – JaredPar

+0

Sì, ma o aggiunge il tag "powershell" solo più tardi, o non l'ho visto al momento della pubblicazione della mia risposta :) – akappa

+2

Sul lato positivo, ls è un alias di Get -ChildItem in PowerShell :) – mortenya

30

Questo può essere semplificato un po 'perché le directory non hanno lunghezza:

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

+1 Lo userò in futuro (meno digitando). –

+2

Più il '.' non è nemmeno richiesto.Potrebbe semplificare quella parte anteriore solo a "gci -r | ..." poiché il percorso predefinito è la directory corrente. –

0

Se avete a cuore un po' di formattazione del risultato-set, qui ci sono due funzioni con uscite più bello di aspetto:

#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

Sembra che non risponda alla domanda originale. –

3

Sono blogged about a similar problem dove voglio trovare i file più grandi in una directory e tutte le sottodirectory (l'intera C: guidare, per esempio), così come la lista la loro dimensione in un bel formato facile da capire (GB , MB e KB). Ecco la funzione di PowerShell che uso in cui sono elencati tutti i file ordinati per dimensione in una bella Out-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 

Output al GridView è bello perché permette di filtrare facilmente i risultati e scorrere attraverso di loro. Questa è la versione più veloce di PowerShell v3, ma il post sul blog mostra anche una versione più lenta di PowerShell v2 compatibile.

E ovviamente se si desidera solo i primi 10 file più grandi, è sufficiente aggiungere un parametro -First 10 alla chiamata Select-Object.

-1

quello di base per ottenere i primi 10 file più grandi nella directory locale:

ls -l -S | head -n 10

oppure è possibile utilizzare

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