2009-04-28 9 views

Répondre

33

Essayez ce script

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

Répartition:

Le bloc de filtre "?{ -not $_.PSIsContainer }" est destiné à filtrer les répertoires. La commande de tri triera toutes les entrées restantes par taille dans l'ordre décroissant. La clause select ne permettra la première 10 à travers elle sera ainsi le plus grand 10.

+0

C'est génial ---- J'ai trouvé comment formater le résultat final en utilisant la table de format mais ce que je ne suis pas clair sur est la syntaxe? {} et $ _ Je suppose que ce sont des formes courtes pour une construction d'instruction? –

+2

La syntaxe? {} est l'abréviation de where-obj ect qui est une expression de filtre. Essentiellement, PowerShell passera chaque objet à la clause? {} Dans le fichier de $ _. Si le retour est $ true, l'objet continuera dans le pipeline, sinon il sera filtré. – JaredPar

+1

c'est une commande intensive en mémoire et propotionnelle à la taille du contenu recherché je suppose. – Ankush

1

Sur linux:

ls -XS | head -n 10 

EDIT: Oh, maintenant je vois le tag "Powershell", désolé pour ma réponse inutile ;)

+0

Il a demandé un échantillon PowerShell – JaredPar

+0

Oui, mais ou il ajoute la balise "powershell" seulement plus tard, ou je ne l'ai pas vu au moment de poster ma réponse :) – akappa

+2

Du bon côté, ls est un alias de Get -ChildItem dans PowerShell :) – mortenya

30

Cela peut être un peu simplifié car répertoires ont aucune longueur:

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

+1 Je vais l'utiliser dans le futur (moins de frappe). –

+2

Plus le '.' n'est même pas nécessaire.Pourrait simplifier cette partie avant à juste "gci -r | ..." puisque le chemin par défaut est le répertoire actuel. –

0

Si vous souciez un peu de mise en forme du jeu de résultats, voici deux fonctions avec des sorties plus joli:

#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

Il semble que cela ne réponde pas à la question initiale. –

3

J'ai blogged about a similar problem où je veux trouver les plus gros fichiers dans un répertoire et tous les sous-répertoires (l'ensemble de lecteur C: par exemple), ainsi que la liste de leur taille dans un joli format facile à comprendre (GB , MB et KB). Voici la fonction PowerShell j'utilise que répertorie tous les fichiers classés par taille dans un joli 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 

à la GridView Sortie est agréable car il vous permet de facilement filtrer les résultats et faites défiler. C'est la version la plus rapide de PowerShell v3, mais l'article du blog montre également une version plus lente compatible avec PowerShell v2.

Et bien sûr, si vous ne voulez que les 10 premiers fichiers les plus volumineux, vous pouvez simplement ajouter un paramètre -First 10 à l'appel Select-Object.

-1

L'un de base pour obtenir le top 10 des plus gros fichiers dans le répertoire local:

ls -l -S | head -n 10

ou vous pouvez utiliser

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

Questions connexes