![Как вывести список каталогов и их размеры в командной строке?](https://rvso.com/image/1331441/%D0%9A%D0%B0%D0%BA%20%D0%B2%D1%8B%D0%B2%D0%B5%D1%81%D1%82%D0%B8%20%D1%81%D0%BF%D0%B8%D1%81%D0%BE%D0%BA%20%D0%BA%D0%B0%D1%82%D0%B0%D0%BB%D0%BE%D0%B3%D0%BE%D0%B2%20%D0%B8%20%D0%B8%D1%85%20%D1%80%D0%B0%D0%B7%D0%BC%D0%B5%D1%80%D1%8B%20%D0%B2%20%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D0%BD%D0%BE%D0%B9%20%D1%81%D1%82%D1%80%D0%BE%D0%BA%D0%B5%3F.png)
Я хотел бы увидеть размеры подпапок в папке, как в 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
У меня нет опыта работы с du
Linux. Но в 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) }
}