2010. 8. 18. 17:58
안녕하세요. 엉스데브 입니다.

리눅스 시스템을 관리 할 때 편하게 사용했던 명령 중에 findgrep 명령이 있었습니다.
여러개의 폴더 및 하위 폴더의 파일을 대상으로 찾고자 하는 문자열을 포함한 파일을 찾아주는 기능을 하는 명령 입니다.
PowerShell 에서도 이 명령을 사용하고 싶어져서, 만들어 보았습니다.

function Search-FileByContentString
{
  param
  (
    [String]$SearchString,
    [String]$TargetDirectory,
    [String]$IncludeExtension = 'txt;asp;aspx;config;xml',
    [Int32]$SkipFileSize = 5MB
  )
 
 $directory = Get-ChildItem($TargetDirectory) -ErrorAction SilentlyContinue

  if($directory -eq $null)
  {
    return $null
  }

  foreach($item in $directory)
  {
    switch($item.GetType().ToString())
    {
      # 파일 일때
      'System.IO.FileInfo'
      {
        if (!($IncludeExtension.Split(';') -eq $item.Extension.Replace('.','')))
        {
          break
        }

        if($item.Length -gt $SkipFileSize)
        {
          break
        }
       
        $Lines = @(Get-Content($item.FullName))

        for($index = 0; $index -lt $Lines.Count; $index++)
        {
          if( $Lines[$index].Contains($SearchString))
          {
            Write-Host $item.FullName"("($index + 1)"): "$Lines[$index]
          }
        }

        break
      }

      # 디렉토리 일때
      'System.IO.DirectoryInfo'
      {
        Search-FilebyContentString -SearchString $SearchString -TargetDirectory $item.FullName -IncludeExtension $IncludeExtension -ExcludeExtension $ExcludeExtension -SkipFileSize $SkipFileSize
        break
      }

      # 다른 종류 일때
      default
      {
        Write-Host "Error:(" + $item.GetType().ToString() + ")"
        break
      }
    }
  }
}

실행 결과:



<참고 URL>
http://thelazyadmin.com/blogs/thelazyadmin/archive/2007/05/09/powershell-dyi-commands-using-functions.aspx
Posted by 알 수 없는 사용자
:
BLOG main image
Windows Server를 공부 하는 사람들의 팀블로그 by 마성민

카테고리

분류 전체보기 (76)
Windows (2)
Powershell (56)
AD (0)
Exchange (6)
System Center (9)
IIS (0)
SQL (3)
Sharepoint (0)

태그목록

Tistory Cumulus Flash tag cloud by BLUEnLIVE requires Flash Player 9 or better.

Total :
Today : Yesterday :