増加するファイルに付きまとう容量の不安

ワークエリアにデスクトップ型PCが設置されていたのはコロナ禍の前だったと思うが、テレワークも普及しておらず固定アドレス時である。機動性に優れたノートPCになりストレージがSSDになったのはいいものの、ストレージ容量はHDD時代より縮小している。しかし、画像やPDF、動画など単体ファイルの容量も随分と増加したのではないだろうか。以前にも増してローカル環境が逼迫する可能性が大である。クラウドがあるとは言っても手元のコマンドで操作できるファイルは重要なものである。

正規表現を使ってフォルダ内のファイル構造を表示するコマンドdeskmemo2で手元のファイルを材料にPowerShellコマンドで練習していたところだ。

function deskmemo2 {
    param($Pattern)

    dir -dir | Where-Object { $_.Name -match $Pattern } | % { dir $_ }
}

たとえば、デスクトップ上の西暦日付フォルダをすべて表示させるのであればカレントディレクトリをデスクトップに移動して\d{8}を引数でわたすと

deskmemo2 '\d{8}'
  • カレントディレクトリをdesktopにしてdeskmemo2 '\d{8}'で数字8つのフォルダ表示

    カレントディレクトリをdesktopにしてdeskmemo2 '\d{8}'で数字8つのフォルダ表示

フォルダの中を正規表現を使ってdir(Get-ChildItem)で表示するわけだが、大きなlengthの表示が気になる。ファイルサイズがバイト単位のlengthで表示されるが時折、大きなものが見える。意識しないで必要なファイルを使っているため、遭遇するとゾッとする。せっかくなので、deskmemo2コマンドにファイルサイズ分析機能を加えてみたい。

"1MB以上のファイルの場合"には赤色で表示

PowerShellには、各サイズ(公式)がそのまま定数として設定されているので、これをそのまま使って"1MBより大きいファイルの場合"には、赤色で表示させるということも可能だ。

function deskmemo2 {
    param($Pattern)
    dir -dir |
    Where-Object { $_.Name -match $Pattern } |
    % {
        dir $_ |
        % {
            if($_.Length -gt 1MB){
               Write-Host $_.Length $_.Name -ForegroundColor Red
               }
             else{
                 $_
               }
           }
      }
 }
  • 1MB以上のサイズは赤色表示

    1MB以上のサイズは赤色表示

正規表現でマッチしたフォルダのファイルの中を表示し、1MB超を赤色にしているが、このままではカレントフォルダ直下のファイルは表示されない(デスクトップで実行しても西暦フォルダ以下のファイルは表示するがデスクトップ直下のファイルは表示しない)。用途を考えると、直下のファイルも対象にしたい。

function deskmemo3 {
param($Pattern)
dir |
Where-Object { $_.Name -match $Pattern } |
% {
    if($_.PSIsContainer){
        Write-Host "[$($_.Name)]" -ForegroundColor Blue
        dir $_ |
        % {
            if($_.Length -gt 1MB){
                Write-Host $_.Length $_.Name -ForegroundColor Red
            }
            else{
                $_
            }
        }
    }
    else{
      if($_.Length -gt 1MB){
                Write-Host $_.Length $_.Name -ForegroundColor Red
            }
            else{
                $_
            }
    }
}
}

フォルダではなくファイルを対象とするため、最初のdirの-dirを削除し、dirのメンバであるPSIsContainer(dir | Get-Member)でフォルダである場合にフォルダ名を青色で表示し、その中のファイルのサイズが1MB超である場合に赤色で表示させる。最後のif -elseでカレントディレクトリのファイルをサイズ探知する。

  • デスクトップ上正規表現のパラメータをとらずに実行

    デスクトップ上正規表現のパラメータをとらずに実行

  • デスクトップ直下のファイルも

    デスクトップ直下のファイルも

  • フォルダ直下のファイルも探知する

    フォルダ直下のファイルも探知する

こうしておけば、大量のフォルダの中にある容量が大きなファイルを探し出すことも用意になる。やってみると、なんだかゲーム感覚のような気分でズバズバ削除することができて楽しいものである。そう思った。