Как вывести список каталогов и их размеры в командной строке?

Как вывести список каталогов и их размеры в командной строке?

Я хотел бы увидеть размеры подпапок в папке, как в du -shкоманде linux. Как мне вывести список каталогов и их размеры в командной строке?

решение1

ПопробуйтеИспользование дискаУтилита от Sysinternals. В частности, du -l 1должна показывать размер каждого подкаталога текущего каталога. Для получения дополнительной информации запустите duбез параметров.


Если с PowerShell все в порядке, попробуйте сделать следующее:

Get-ChildItem |
Where-Object { $_.PSIsContainer } |
ForEach-Object {
  $_.Name + ": " + (
    Get-ChildItem $_ -Recurse |
    Measure-Object Length -Sum -ErrorAction SilentlyContinue
  ).Sum
}

Размеры указаны в байтах. Чтобы отформатировать их в более крупной единице, например, МБ, попробуйте следующее (сокращенное до одной строки):

Get-ChildItem | Where-Object { $_.PSIsContainer } | ForEach-Object { $_.Name + ": " + "{0:N2}" -f ((Get-ChildItem $_ -Recurse | Measure-Object Length -Sum -ErrorAction SilentlyContinue).Sum / 1MB) + " MB" }

Для получения более подробной информации см.эта статья на Technet.

Если вам требуется более гибкое форматирование размеров (выбор КБ/МБ/ГБ и т. д. в зависимости от фактического размера), см.этот вопрос и ответы на него.


Я не думаю, что возможно сделать то, что вы хотите, из обычной командной строки и всего лишь с несколькими простыми командами. Смотритеэтот скрипт в качестве примера(не буду копировать это сюда, поскольку не считаю, что этот подход стоит использовать, если только PowerShell недоступен, а сторонние утилиты неприемлемы).

решение2

У меня нет опыта работы с duLinux. Но в Windows я использую dir /sдля перечисления всех папок и подпапок вместе с размерами файлов.

решение3

Это модификацияОтвет Индрека. Я добавил следующее:

  • сделал рекурсивным переход дальше в подкаталоги
  • добавлен порог размера для исключения каталогов samller
  • заменил имена каталогов на их относительные пути из текущего каталога
  • отсортировал результаты по их пути (мне это показалось более удобным, чем сортировать их по размеру, когда они уже отфильтрованы по размеру)
  • добавлено форматирование, чтобы сделать результаты более читабельными

Итак, установите $minsizeMBи $maxdepthс нужными значениями и запустите скрипт.

$minsizeMB = 100; 
$maxdepth = 5; 
Get-ChildItem -depth $maxdepth -Recurse |
    Where-Object { $_.PSIsContainer } |
    Select-Object FullName | 
    Sort-Object FullName |
    ForEach-Object { 
        $directory = Get-Item $_.FullName;
        $path = Resolve-Path -Relative $directory.FullName ; 
        $size = ((Get-ChildItem $directory -Recurse | Measure-Object Length -Sum -ErrorAction SilentlyContinue).Sum / 1MB) ; 
        if ($size -ge $minsizeMB) { "{0,-90}: {1:N2} MB" -f ($path, $size) } 
    }

Связанный контент