【PowerShell】ディレクトリごとの行数をカウントする


実行

ディレクトリごとにソースの行数を出すスクリプトです。

拡張子でフィルターをかけられます。 空行は除けていません。

操作方法

1.  スクリプトを  メモ帳か  Visual Studio Code などで編集 2.  PowerShellを管理者権限で開き、ローカルパワーシェル実行に対する権限を追加 3.  相対か絶対パスで、bashのように読み込み 4   パスと、 カンマ区切りでの拡張子フィルターを指定する。

実行例:実行

> . ..\PowerShell\Count\count2.ps1
> Get-TotalFileNumOfEachDir ./ *css,*.html,*.json,*js

# または <#   #>でコメントです。

ソース

win10で実行しましたが、 mac/linuxでも powershellを入れれば動くと思います。

※まだバグってて  起動引数ひとつめは 任意ではなく、カレントディレクトリ .\ でないと動かないかもしれません。

Function Get-TotalFileNumOfEachDir() {
  if ($args.Length -ne 2) {
    $Host.UI.WriteErrorLine("Usage: Get-TotalFileNumOfEachDir <path> <filter:*.cs>")
    return
  }
  $pathto = $args[0]
  $filters = $args[1].Split(",")
  if (!(Test-Path -PathType Container $pathto)) {
    $Host.UI.WriteErrorLine("Cannot access $pathto : No such directory")
    return
  }

  echo (Resolve-Path $pathto).Path
  foreach($filter in $filters){
    $outputsArray = @()
    $dirs = Get-ChildItem $pathto | Where-Object PSisContainer
    $dirs | % {
      $PATH=$_;
      if ((Get-ChildItem $_.FullName).Length -ne 0) {
        $measure = Get-ChildItem -Force -Recurse $_.FullName  -Include $filter | Get-Content | Measure-Object -Line -Word -Character
        $outputsArray += [PSCustomObject]@{ PATH=$PATH; Line=$measure.Lines; Word=$measure.Words; Char=$measure.Characters }
      } else {
        $outputsArray +=  [PSCustomObject]@{ PATH=$PATH; Line=0; Word=0; Char=0 }
      }
    }
    echo $filter 
    $outputsArray
  }
}

実行例:実行結果

以下が nセット出力されます。

PATH                Line Word  Char
----                ---- ----  ----
addon                  0    0     0
EdgeScroller         119  247  3984
FastHistory          153  336  5190
GameKeyMove           72  210  2447
GoogleCalendar         0    0     0
LastModified           0    0     0
Longman              153  346  5633
PageHeadLine          86  270  3372
SearchMultiTab       151  408  5410

VerticalLine         153  361  7505
WebArchive             0    0     0

最新フォーマットのFireFox addonのページはこちらへどうぞ

参考

Delicious にシェア
Digg にシェア
reddit にシェア
LinkedIn にシェア
LINEで送る
email this
Pocket

155 views.



コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です