codeheart 위치로그  |  태그  |  미디어로그  |  방명록
icon 2013/12/23 에 해당하는 글1 개
2013.12.23   powershell 응용


icon powershell 응용
개발/Script | 2013. 12. 23. 14:48

[문제]

현재 폴더에 위치한 서브 폴더 안에 있는 특정 파일을 출력한다.

조건1. 어느 서브 폴더에 있는 것부터 출력하냐면 폴더명 역순으로.


다양한 방법이 있고, 더 간단한 방법도 있을 수 있다.

하지만 파워쉘의 강력한 기능들을 인지하는 차원에서 여러 기능을 활용해본다.


ls | ?{$_.PSIsContainer} | sort -desc | %{pushd $_; if (Test-Path filename) { write-host $_ ':' (cat filename) }; popd}    


설명


ls

Get-ChildItem 의 alias. gci로 해도 되고, dir 로 해도 된다.


? { ... }

? 은 필터 기능이다. 결과물(배열) 중 필요한 녀석만 선택해 새로운 배열로 변환한다.

함수형 언어의 filter 함수라고 보면 된다. { ... } 은 람다로 보면 되고 필터할 조건구문을 서술한다.


PSIsContainer

노드객체의 프로퍼티이다. 속성명이 맘에 안드는데... 해당 노드가 디렉토리면 true, 일반 파일이면 false 를 반환한다.


$_

람다의 디폴트 파라메터 (ls 의 각 요소(파일/디렉토리 노드)들이 들어옴)


sort

정렬 기능인데, -desc 옵션을 주면 역순 정렬임.


% { ... }

foreach 인데 용법 두가지 중 하나. 파이프라인 뒤에 사용하는 foreach 는 앞선 array 들의 각 요소들 마다 람다를 수행한다.


Test-Path

파일이 존재하는지 알아보는 함수. 기타 추가적인 기능이 있을 수 있다.


write-host

command쉘은 echo 에 해당함.

(참고로 powershell 의 echo 는 좀 더 객체지향적인 이해가 가미된 write-host 라고 보면 된다.)


cat

Get-Content 의 alias


(....) // 위에서 (cat ...) 한 구문

bash 의 $(...) 와 비슷하다고 보면 된다. 하지만 파워쉘은 모든 구문이 더 명료하고 직관적이기 때문에 일반적인 언어처럼 쉽게 이해 된다.


pushd

Push-Location 의 alias. command 에도 이런 기능이 있다. cd 와 유사하나, stack 에 기존 폴더를 넣고 해당 폴더로 이동한다.


popd

Pop-Location 의 alias. command 에도 이런 기능이 있다. 스택에 넣어진 폴더로 cd 한다.



Unix 계열의 shell 특히 bash shell 은 매우 훌륭하지만, 너무 고전적이다.

그러한 단점을 모두 극복하고 프로그래머가 더 다루기 좋은 도구로 발전시킨게 PowerShell 이 아닌가 싶다.


bash 에 능숙하다면, powershell 은 더 능숙하게 사용할 수 있을 거라 생각된다.


bash 는 shell 자체 보다는 유명한 unix 커맨드 스크립트를 활용하여 강력한 면이 있지만, 보수적인 면 때문에 답답한 부분도 없지 않아 있다.


bash 도 grep, sed, awk 이런 것들을 pipeline 과 조합하여 강력하게 사용가능하지만, 

powershell 은 그 구시대적인 모든 것을 쉘 자체에서 지원하고 있다.

물론 얼마 되지 않았으므로 더 명료하고 더 간단하면서도 직관적이다.


arrow 트랙백 | 댓글



[PREV] [1] [NEXT]
관리자  |   글쓰기
BLOG main image
code heart story
분류 전체보기 (74)
생활 (0)
잡담 (8)
컴퓨터 (11)
개발 (52)
Total :
Today :
Yesterday :
rss
위치로그 : 태그 : 방명록 : 관리자
코드하트's Blog is powered by Daum / Designed by plyfly.net