Du в PowerShell?
Как я могу получить du -ий анализ с помощью PowerShell? Я хотел бы периодически проверять размер каталогов на моем диске.
Ниже приводится размер каждого файла в текущем каталоге:
foreach ($o in gci)
{
Write-output $o.Length
}
Но то, что я действительно хочу, это совокупный размер всех файлов в каталоге, включая подкаталоги. Кроме того, я хотел бы иметь возможность сортировать его по размеру, необязательно.
Ответы
Ответ 1
В блоге "Изучение красивых языков" есть реализация:
"Реализация" du -s *" в Powershell
function directory-summary($dir=".") {
get-childitem $dir |
% { $f = $_ ;
get-childitem -r $_.FullName |
measure-object -property length -sum |
select @{Name="Name";Expression={$f}},Sum}
}
(Код владельца блога: Луис Диего Фальяс)
Вывод:
PS C:\Python25> directory-summary
Name Sum
---- ---
DLLs 4794012
Doc 4160038
include 382592
Lib 13752327
libs 948600
tcl 3248808
Tools 547784
LICENSE.txt 13817
NEWS.txt 88573
python.exe 24064
pythonw.exe 24576
README.txt 56691
w9xpopen.exe 4608
Ответ 2
Я немного изменил команду в ответе, чтобы отсортировать по убыванию по размеру и включить размер в МБ:
gci . |
%{$f=$_; gci -r $_.FullName |
measure-object -property length -sum |
select @{Name="Name"; Expression={$f}},
@{Name="Sum (MB)";
Expression={"{0:N3}" -f ($_.sum / 1MB) }}, Sum } |
sort Sum -desc |
format-table -Property Name,"Sum (MB)", Sum -autosize
Вывод:
PS C:\scripts> du
Name Sum (MB) Sum
---- -------- ---
results 101.297 106217913
SysinternalsSuite 56.081 58805079
ALUC 25.473 26710018
dir 11.812 12385690
dir2 3.168 3322298
Возможно, это не самый эффективный метод, но он работает.
Ответ 3
function Get-DiskUsage ([string]$path=".") {
$groupedList = Get-ChildItem -Recurse -File $path | Group-Object directoryName | select name,@{name='length'; expression={($_.group | Measure-Object -sum length).sum } }
foreach ($dn in $groupedList) {
New-Object psobject -Property @{ directoryName=$dn.name; length=($groupedList | where { $_.name -like "$($dn.name)*" } | Measure-Object -Sum length).sum }
}
}
Шахта немного отличается; Я группирую все файлы по имени каталога, а затем просматриваю итоговые данные по списку для каждого каталога (включая подкаталоги).