2010. 8. 18. 17:58
안녕하세요. 엉스데브 입니다.
리눅스 시스템을 관리 할 때 편하게 사용했던 명령 중에 findgrep 명령이 있었습니다.
여러개의 폴더 및 하위 폴더의 파일을 대상으로 찾고자 하는 문자열을 포함한 파일을 찾아주는 기능을 하는 명령 입니다.
PowerShell 에서도 이 명령을 사용하고 싶어져서, 만들어 보았습니다.
실행 결과:
<참고 URL>
http://thelazyadmin.com/blogs/thelazyadmin/archive/2007/05/09/powershell-dyi-commands-using-functions.aspx
리눅스 시스템을 관리 할 때 편하게 사용했던 명령 중에 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
}
}
}
}
{
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
'Powershell > 엉스데브' 카테고리의 다른 글
PowerShell 로 zip 파일 압축해제 및 압축 하기. (1) | 2010.08.25 |
---|---|
PowerShell 로 IIS 설치 하기(Windows 2008 R2, ServerManager 모듈 사용) (5) | 2010.08.24 |
PowerShell 을 통한 로컬 사용자 추가 및 삭제 (0) | 2010.08.18 |
PowerShell 용 df (disk freespace) 명령어. (1) | 2010.08.12 |
PowerShell 의 현재 실행 권한 확인 하기 (0) | 2010.08.02 |