دو في بوويرشيل؟
-
22-08-2019 - |
سؤال
وكيف يمكنني الحصول على دو تحليل -ish باستخدام بوويرشيل؟ أود أن تحقق بشكل دوري حجم الدلائل على القرص بلدي.
وفيما يلي يعطيني حجم كل ملف في الدليل الحالي:
foreach ($o in gci)
{
Write-output $o.Length
}
ولكن ما أريد حقا هو حجم الكلي لجميع الملفات في الدليل، بما في ذلك الدلائل. كما أود أن تكون قادرة على ترتيب هذا الامر حسب الحجم، اختياريا.
المحلول
وهناك تطبيق متوفر في "استكشاف جميلة اللغات" بلوق:
"تنفيذا ل" دو -s * في بوويرشيل "
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
نصائح أخرى
ولقد عدلت الأمر في الإجابة قليلا لفرز تنازلي حسب الحجم وتشمل الحجم في MB:
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
وربما أنها ليست الطريقة الأكثر كفاءة، لكنه يعمل.
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 }
}
}
والألغام هي مختلفة بعض الشيء. المجموعة الأولى كل من الملفات على directoryname، ثم المشي من خلال أن المجاميع بناء قائمة لكل دليل (لتشمل الدلائل).