du.exe
を使用すると、大量のスペースを占めるフォルダを再帰的に識別できます。たとえば、次は、3レベルの深さc:\
からのすべてのフォルダのサイズを示します。
du.exe -l 3 c:\
この出力をフィルタリングして、1 GBを超えるフォルダのみを表示するにはどうすればよいですか?
参考のためにdu.exe
からの出力の抜粋を以下に示します。
Du v1.4 - report directory disk usage
Copyright (C) 2005-2011 Mark Russinovich
Sysinternals - www.sysinternals.com
6,344,864 c:\Windows\winsxs
18,268,671 c:\Windows
483,343,308 c:\
Files: 412125
Directories: 42072
Size: 494,943,548,281 bytes
Size on disk: 487,560,269,896 bytes
私は以前のdu
/powershell
コンボで新しいバリアントを提供しています。どちらもdu
v1.61で私のために機能しなかったからで、他の人は同じことに直面するかもしれません問題。以前の亜種でいくつかの問題に遭遇しました:
du
の-nobanner
スイッチを含める必要があります(含めなかった)ため、上部のバナーがConvertFrom-Csv
で詰まることはありません(私にとっては、不思議な目に見えない出力として現れます)。Cannot convert value "40822284152" to type "System.Int32". Error: "Value was either too large or too small for an Int32."
一部の行。おそらく非常に大きなディレクトリ。Where-Object { [int]$_.DirectorySize -gt 1048576 }
が存在するにもかかわらず、出力には1GBをはるかに下回る非常に小さなディレクトリが含まれます私はPowershellのエキスパートではありませんが、前の2つのバリアントをなんとかして、実用的なソリューションを提供することができました。
du -nobanner -c -l 3 \ | ConvertFrom-Csv | select Path,@{Name="DirectorySize";expression={$_.DirectorySize / 1GB }} | Where-Object { $_.DirectorySize -gt 1 } | Sort-Object { $_.DirectorySize } -descending
そしてちょっとした笑いのために、正規表現でdu
とfindstr
を使用した、柔軟性が低く/精度が低いソリューションを次に示します。
du -l 3 \ | findstr /R /C:",[0-9][0-9][0-9],[0-9][0-9][0-9] "
これは、1GB
上のディレクトリが印刷されるパターンを利用しています。具体的には、3桁の前に追加の先行コンマがあり、その後にさらに3桁続くコンマがあります。末尾に印刷される合計を除外するには、後続の2つのスペースが必要です。注:このソリューションは、Powershellソリューションのようにディレクトリサイズで並べ替えることはしません。
他の答えが言うように、du.exe
だけでそれを行うことはできません。 PowerShellで救出!
.\du.exe -c -l 3 C:\ | ConvertFrom-Csv -Header Size,Path | Where-Object { [int]$_.Size -gt 1048576 } | Sort-Object { [int]$_.Size } -descending
その長いコマンドを、それぞれ次のビットにパイプされる個々のビットに分解します。
.\du.exe -c -l 3 C:\
-c
パラメータがdu
に出力をCSVとしてフォーマットするように指示することを除いて、これは基本的にはあなたが始めたものです。
ConvertFrom-Csv -Header Size,Path
これにより、CSV出力がdu
から取得され、PowerShellハッシュテーブルに変換されます。 du
は列名のヘッダーを提供しないため、手動で行う必要があります。
Where-Object { [int]$_.Size -gt 1048576 }
これにより、データがフィルター処理され、サイズが1 GBを超える行のみが返されます(du
はサイズをKBで返し、1 GB = 1048576 KB)。数値データを処理していることをPowerShellに知らせるために、[int]
の部分に注意してください。
Sort-Object { [int]$_.Size } -descending
これにより、サイズでデータが降順でソートされます(ここでも、ソートするデータが数値であることを指定しています)。もちろん、これはオプションです。
最新のdu.exeバージョンでは、Powershell ConvertFrom-Csvを使用してヘッダーを追加しても、そのままでは機能しません。du.exeがリストに独自のヘッダーを追加するためです。必要なのは、selectコマンドで既存のヘッダーを選択することです。
du.exe -c -l 3 C:\ | ConvertFrom-Csv | select Path,DirectorySize | Where-Object { [int]$_.DirectorySize -gt 1048576 }
そのオプションはDU 1.4では使用できません
使用法:du [-c] [-l(レベル)| -n | -v] [-u] [-q](ディレクトリ)
-c出力をCSVとして出力します。
-lサブディレクトリの情報の深さを指定します(デフォルトはすべてのレベルです)。
-n再帰しません。
-qクワイエット(バナーなし)。
-uハードリンクされたファイルの各インスタンスをカウントします。
-v中間ディレクトリのサイズ(KB)を表示します。
したがって、DUを使用するだけでは、出力を特定のサイズのものに制限できません。