Windows 에서 파일을 관리 하는 경우 Powershell 을 사용하면 매우 편리합니다. 대부분의 파일 작업은 반복되는 작업인 경우가 많습니다. 이런 작업들을 Powershell 스크립트로 한번 작성 해 놓고 반복해서 사용한다면 매우 편리 할 것입니다.

요즘 많은 분들이 컴퓨터를 사용하여 드라마를 다운로드 받아서 볼 텐데 동일한 드라마에 대한 여러 해상도의 파일을 다운로드 받는 경우가 종종 있습니다. 이런 경우 저는 낮은 해상도의 파일은 지웁니다.

아래는 중복된 파일이 있는 경우의 예입니다. E06 회차의 드라마에 대해 1080p, 720p 의 드라마가 중복되는 것을 확인 할 수 있습니다. 이런 경우 저는 높은 해상도의 파일은 남겨 놓고 낮은 해상도의 파일은 지웁니다.

[tvN] 나의 아저씨.E06.180405.1080p-NEXT.mp4

[tvN] 나의 아저씨.E06.180405.720p-NEXT.mp4

이를 위한 Powershell 스크립트는 아래와 같습니다. 아래 파일에서 ‘드라마폴더경로’ 부분만 본인의 폴더 경로에 맞도록 수정후에 실행하면 될 겁니다.


Powershell을 사용하여 파일 관리를 하면 여러모로 편리한 것들이 많이 있습니다.

오늘은 지지난주 이전의 특정 파일들을 지우는 스크립트를 작성해 볼까 합니다.

저는 특정 메모들을 다음과 같이 D:\MEMO_JKD.txt 라는 형태로 저장하곤 합니다.

그리고 하루에 한번씩 이 MEMO.txt 파일을 날짜를 붙여서 20170210_MEMO.txt 와 같이 백업해 놓습니다.

시간이 지나면 지날 수록 해당 메모 파일들은 양이 계속 늘어 나겠죠.

그래서 이주 정도가 지난 메모 파일은 지우곤 합니다.

이러한 경우 다음과 같이 Powershell 스크립트를 작성해서 사용 할 수 있습니다.

$dayofweek = [int](Get-Date).DayOfWeek
$weekAgoDate=(Get-Date).AddDays(-($dayofweek+7))
gci D:\* -Include *MEMO.txt | ? {$_.Name -match '\d_MEMO.txt' -and $_.LastWriteTime -lt $weekAgoDate} | Remove-Item -Force


위 스크립트는 현재 사용하고 있는 MEMO.txt 파일은 지우면 안되므로 이름 앞에 숫자가 들어간 메모파일들 중에 이주 이상된 파일들을 지우는 스크립트 입니다.

요즘은 많은 분들이 TV 프로그램을 다운로드 받아서 보실텐데 이런 방송 프로그램들도 위와 같은 스크립트를 통해 특정 시간이 지난것들은 제거 해 주는 용도로도 사용 할 수 있을 겁니다. 


Windows 에서 폴더 및 파일 관리시 비어 있는 폴더를 삭제 하고 싶은 경우가 있습니다.

 

그래서 저는 간단하게 빈폴더를 삭제하는 Powershell script 를 만들어서 사용하곤 합니다.

 

아래 소개한 powershell profile 에 작성해서 사용하면 조금더 편리하게 사용 할 수 있습니다.

 

http://iamaman.tistory.com/1017

 

스크립트는 아래와 같습니다. 그냥 하위 폴더는 그냥 두고 현재 폴더만 확인하고 싶은 경우와 빈 폴더만 확인하고 싶은 경우를 위해 recurse 와 Delete 를 옵션으로 줬습니다.

 

function emptyFolderFind

{

    param

    (

        $folder,

        [Switch]$Recurse,

        [Switch]$Delete

    )

 

    if($Recurse)

    {

        $a = Get-ChildItem $folder -Recurse | Where-Object {$_.PSIsContainer -eq $True}    

    }

    else

    {

        $a = Get-ChildItem $folder | Where-Object {$_.PSIsContainer -eq $True}

    }

    

    $b = $a | Where-Object {($_.GetFiles().Count -eq 0) -and ($_.GetDirectories().Count -eq 0)}

    $b | Select-Object FullName    

      

        

    if ($Delete -and $b)

    {

        $b | Remove-Item -Force

        Write-Host "Empty folder Deleted!!"

    }    

}

 

E:\workspace 하위의 폴더 중 빈폴더를 삭제 하기 위해서는 아래와 같은 명령어를 사용합니다. 

emptyFolderFind "E:\workspace" -Delete

 

하위 폴더도 검색하기 위해서는 Recurse 옵션을 주고 아래와 같이 Recurse 하게 검색 및 삭제 할 수 있습니다. 

emptyFolderFind "E:\workspace" -Delete -Recurse


컴퓨터를 사용하다 보면 특정 용량 이상 또는 특정 용량 이하의 파일들을 걸러 내고 싶은 경우가 있다.

이런 경우엔 단순히 윈도우 탐색기에서 크기에 따라 정렬을 한 이후에 드래그 하여 지우는 방법 등을 쓸 수가 있다.

하지만 같은 폴더내에 특정 확장자의 파일만 지우고 싶은 경우에는 윈도우 탐색기만으로는 부족하다.

이런 경우 powershell 을 이용하면 너무나 간단히 작업을 완료 할 수가 있다.

나의 경우엔 D:\movie_folder 안에 있는 avi 파일 중에서 용량이 100 MB 이하인 파일들을 지우고 싶었다.

위 작업을 수행하는 powershell 코드는 아래와 같다.

 

gci d:\movie_folder\* -Include *.avi | Where-Object -FilterScript { $_.length -lt 100MB } | Remove-Item –Force

 

위 코드에 대해 설명을 해 보자.

  • gci 는 Get-ChildItem 의 alias(별명) 으로서 우리가 흔히 알고있는 dir 과 같은 의미이다. 즉 저장소 내의 하위 항목들을 가져 온다.
  • d:\movie_folder\* 는 찾고자 하는 폴더
  • -Include *.avi 은 avi 파일만 찾겠다는 의미
  • 이에 대해 파이프라인( | ) 으로 연결해서 Where-Object 로 찾고자 하는 조건을 만들어준다.
  • $_.length 은 각 항목들의 크기를 말한다.
  • -lt 는 비교 연산자이다. < 를 의미 하는 것으로 작다 를 나타내는 비교 연산자이다. 100 MB 보다 작은 파일들만 걸러낸다.
  • Remove-Item –Force 는 강제로 삭제하라는 의미다.

 

위 코드에서 비교연산자 부분에 대해 추가적인 설명을 하자면

powrshell 에서는 우리가 흔히 알고 있는 비교 연산자인 > , < , >= 등을 쓰지 않는다.

대신 다음과 같이 문자로 표시 한다.

 

표 1, powershell 비교 연산자

-lt

Less than

작다

-le

Less than or equal to

작거나 같다

-gt

Greater than

크다

-ge

Greater than or equal to

크거나 같다

-eq

Equal to

같다

-ne

Not equal to

같지 않다

-like

Like (uses wildcards for matching)

유사하다

-notlike

Not like (uses wildcards for matching)

유사하지 않다

표 출처: powershell 비교연산자

 


+ Recent posts