2009-04-28 12 views

Respuesta

33

probar este script de

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

Desglose:

El bloque de filtro "?{ -not $_.PSIsContainer }" está destinado a filtrar los directorios. El comando de clasificación ordenará todas las entradas restantes por tamaño en orden descendente. La cláusula select sólo permitirá el primer 10 por lo que será la más grande 10.

+0

Eso es genial ---- Me di cuenta de cómo formatear el resultado final usando format-table pero lo que no tengo claro es la sintaxis? {} y $ _ Supongo que estas son formas abreviadas de alguna instrucción de construcción? –

+2

La sintaxis? {} es la abreviatura de where-obj ect que es una expresión de filtro. Esencialmente, powershell pasará cada objeto a la cláusula? {} En el origen de $ _. Si el retorno es $ true, el objeto continuará por la tubería, de lo contrario se filtrará. – JaredPar

+1

esto es un comando intensivo de memoria y propotional para el tamaño del contenido que se busca, supongo. – Ankush

1

en Linux:

ls -XS | head -n 10 

EDIT: Ah, ahora veo la etiqueta "powershell", lo siento por mi respuesta inútil ;)

+0

Pidió una muestra de powershell – JaredPar

+0

Sí, pero o agrega la etiqueta "powershell" más tarde, o no la he visto en el momento de publicar mi respuesta :) – akappa

+2

Por el lado positivo, ls es un alias de Get -ChildItem en PowerShell :) – mortenya

30

Esto se puede simplificar un poco porque directorios tienen ninguna longitud:

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

+1 Lo usaré en el futuro (menos tipeo). –

+2

Más el '.' ni siquiera es obligatorio.Podría simplificar esa parte frontal para simplemente "gci -r | ..." ya que la ruta predeterminada es el directorio actual. –

0

Si se preocupan por un poco de formato del conjunto de resultados, aquí hay dos funciones con salidas más agradable buscando:

#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

Parece que no responde la pregunta original. –

3

He blogged about a similar problem donde quiero encontrar los archivos más grandes en un directorio y todos los subdirectorios (toda la unidad C: por ejemplo), así como la lista de su tamaño en un bonito formato fácil de entender (GB , MB y KB). Esta es la función de PowerShell uso que enumera todos los archivos ordenados por tamaño en un bonito 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 

Dar salida a la GridView es agradable, ya que le permite filtrar fácilmente los resultados y desplazarse a través de ellos. Esta es la versión más rápida de PowerShell v3, pero la publicación de blog también muestra una versión más lenta compatible con PowerShell v2.

Y, por supuesto, si solo desea los 10 archivos más grandes, puede agregar un parámetro -First 10 a la llamada Select-Object.

-1

El básico para conseguir los 10 más grandes archivos en el directorio local:

ls -l -S | cabeza -n 10

o puede utilizar

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

Cuestiones relacionadas