Come trovare i 10 file più grandi in una struttura di directory?Come trovare i 10 file più grandi in una struttura di directory
risposta
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.
Su Linux:
ls -XS | head -n 10
EDIT: Oh, ora vedo il tag "powershell", dispiace per la mia risposta inutile ;)
Questo può essere semplificato un po 'perché le directory non hanno lunghezza:
gci . -r | sort Length -desc | select fullname -f 10
+1 Lo userò in futuro (meno digitando). –
Più il '.' non è nemmeno richiesto.Potrebbe semplificare quella parte anteriore solo a "gci -r | ..." poiché il percorso predefinito è la directory corrente. –
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
}
Sembra che non risponda alla domanda originale. –
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.
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
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? –
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
questo è un comando di memoria intensivo e proporzionale alla dimensione del contenuto che si sta cercando, credo. – Ankush