Размер папки в списке по трубам - PullRequest
2 голосов
/ 16 августа 2010

Как я могу перечислить размер каждой папки в каталоге по сумме всех файлов в каждой папке / подпапках?

Моя последняя попытка:

ls | foreach-object { select-object Name, @{Name = "Size"; Expression = { ls $_ -recurse | measure-object -property length -sum } }

Я сделал другиепопыток, но пока ничего не получилось.Любые предложения или решения приветствуются.Я чувствую, что упускаю что-то очень очевидное.

Вывод должен выглядеть следующим образом:

Размер имени

И он должен перечислять каждую папку в корневой папке иразмер папки с учетом вложенных папок в этой папке.

Мне удалось решить эту проблему следующим образом:

param([String]$path)
ls $path | Add-Member -Force -Passthru -Type ScriptProperty -Name Size -Value {  
   ls $path\$this -recurse | Measure -Sum Length | Select-Object -Expand Sum } | 
   Select-Object Name, @{Name = "Size(MB)"; Expression = {"{0:N0}" -f ($_.Size / 1Mb)} } | sort "Size(MB)" -descending

Ответы [ 3 ]

5 голосов
/ 16 августа 2010

Я думаю, что вы в принципе получили это, честно.

Вы можете быть немного элегантнее, используя Add-Member:

ls | Add-Member -Force -Passthru -Type ScriptProperty -Name Length -Value { 
   ls $this -recurse | Measure -Sum Length | Select -Expand Sum }

PSCX портит форматирование и выводит "" для размера, даже если у вас есть размер Если вы используете PSCX, вам придется добавить явный | Format-Table Mode, LastWriteTime, Length, Name -Auto

1 голос
/ 16 августа 2010

Это не особенно элегантно, но должно выполнить работу:

gci . -force | ?{$_.PSIsContainer} | 
   %{$res=@{};$res.Name=$_.Name; $res.Size = (gci $_ -r | ?{!$_.PSIsContainer} |
     measure Length -sum).Sum; new-object psobject -prop $res}

Обратите внимание на использование -Force, чтобы убедиться, что вы суммируете скрытые файлы.Также обратите внимание на псевдонимы, которые я использовал (удобно при вводе текста в интерактивном режиме).Есть ? для Where-Object и % для Foreach-Object.Сохраняет запястья.: -)

0 голосов
/ 16 августа 2010

Здесь - это удобный пример скрипта Powershell , который может быть адаптирован под то, что вы ищете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...