Netwrix 1Secure는 데이터와 아이덴티티 전반에 걸쳐 통합된 가시성을 제공합니다 - 14일간 무료로 전체 액세스가 가능합니다.무료 평가판 시작

리소스 센터블로그

PowerShell Delete File If Exists

PowerShell Delete File If Exists

Apr 24, 2025

Remove-Item cmdlet 개요

파일과 디렉터리를 관리하는 일은 컴퓨팅에서 흔히 수행되는 작업이며, 특히 Windows PowerShell 환경에서는 더욱 그렇습니다. PowerShell의 Remove-Item은 파일과 디렉터리를 삭제하는 데 사용되는 주요 cmdlet이며, PowerShell에서 다루는 다른 유형의 항목을 삭제할 때도 사용할 수 있습니다. Remove-Item은 로컬 파일 시스템뿐만 아니라 레지스트리, 인증서 저장소, 환경 변수와 같은 다른 PowerShell 공급자(프로바이더)에서도 사용할 수 있습니다. 또한 Remove-Item은 파이프라인을 통해 다른 cmdlet의 입력을 받을 수 있어, 파일 관리 작업을 보다 동적으로 수행하고 자동화할 수 있습니다. 중요한 점은 기본적으로 Remove-Item으로 삭제한 항목이 시스템에서 영구적으로 제거되며 휴지통으로 보내지지 않는다는 것입니다. 이 cmdlet을 사용할 때는 수행하려는 작업에 대해 확실히 인지하고 사용해야 합니다.

중요성 및 일반적인 사용 사례

PowerShell의 Remove-Item cmdlet은 시스템을 체계적으로 유지하고 원활하게 실행되도록 하는 데 중요합니다. 불필요한 파일을 정리하고 디스크 공간을 확보할 수 있어 파일 및 디렉터리 관리를 효과적으로 수행하는 데 필수적입니다. 스크립팅과 자동화에서는 수동 개입 없이 오래되었거나 임시 파일을 제거할 수 있게 해 주므로 워크플로를 간소화하는 데 도움이 됩니다. 또한 PowerShell Remove-Item cmdlet은 시간이 지남에 따라 쌓이는 로그 파일이나 임시 폴더를 정리하는 등 정기적인 유지보수 작업에도 유용합니다.

일반적인 사용 사례

다음은 Remove-Item 명령을 사용하는 일반적인 사용 사례입니다:

  • 임시 파일 삭제: 시스템 성능을 유지하기 위해 정기적으로 임시 파일을 제거합니다.
  • 오래된 백업 정리: 저장 공간을 절약하기 위해 오래된 백업 파일을 자동으로 삭제합니다.
  • 일괄 삭제: 특정 확장자를 가진 여러 파일을 제거합니다.
  • 빈 디렉터리 제거: 디렉터리 구조에서 빈 폴더를 정리합니다.
  • 레지스트리 키 정리: 더 이상 필요하지 않은 특정 레지스트리 키를 삭제합니다.
  • 배포 스크립트: 배포 스크립트에서는 새 애플리케이션을 설치하기 전에 기존의 오래된 버전을 제거합니다.

지원되는 프로바이더 및 항목 유형

Remove-Item PowerShell 명령은 다양한 프로바이더와 항목 유형을 지원합니다. 주로 파일 시스템 내에서 파일과 폴더를 삭제하는 데 사용되지만, 기능은 파일 시스템에만 국한되지 않습니다. 레지스트리 키와 항목도 삭제할 수 있습니다. 따라서 시스템 구성을 정리하거나 수정하는 데 유용합니다. 이 목적을 위해서는 덜 일반적으로 사용되지만, Remove-Item은 다른 PowerShell 프로바이더와 함께 동작하여 변수나 별칭 같은 항목을 삭제할 수도 있습니다.

기본 문법

Remove-Item의 기본 문법은 다음과 같습니다.

      Remove-Item [-Path] <string[]> [-Force] [-Recurse] [-LiteralPath <string[]>] [-Confirm] [-WhatIf] [-ErrorAction <ActionPreference>] [-WarningAction <ActionPreference>] [-InformationAction <ActionPreference>] [-InformationVariable <string>] [<CommonParameters>]
      

다음은 공통 매개 변수가 포함된 cmdlet의 예시입니다.

      Remove-Item -Path C:\Backups\Design.txt -Force -Recurse -WhatIf
      

Remove-Item cmdlet 매개 변수

다음은 Remove-Item cmdlet과 함께 가장 일반적으로 사용되는 매개변수입니다:

Parameters

Explanation

-Path

Specifies the path to the items that you want to remove. This parameter accepts wildcard characters, allowing for pattern matching. The path element can mean either absolute or relative.

-LiteralPath

Similar to -Path, but treats the path exactly as specified, without interpreting wildcards.

-Force

This is a remove item cmdlet that is used to force a command to remove items that cannot otherwise be deleted. For example, this can include hidden or read-only files or items with child items that are not empty. Use this parameter with caution, as it can result in data loss.

-Include

Specifies only the items that match the specified pattern or type of item to be removed. This works in conjunction with the -Path parameter to filter out items within the path.

-Exclude

Specifies items that should not be removed. This is used to exclude certain items from the operation based on the pattern provided.

-Recurse

If the item being removed is a directory, this parameter will ensure that all its child items are also removed. Without this parameter, the command will not delete directories that are not empty.

-WhatIf

This is a safety parameter that shows what would happen if the cmdlet ran, without performing the deletion. It is useful for verifying what will be deleted before committing to the action.

-Confirm

Prompts you for confirmation before executing the cmdlet. This can be a useful safety check to prevent accidental deletion of important items.

-Credential

Allows you to specify a user account with permission to perform the deletion, if necessary.

-Stream

This parameter is used to delete alternate data streams (ADS) from files and folders.

파일 탐색기(File Explorer)를 사용해 전체 경로를 찾고 복사하는 방법

Windows의 파일 탐색기(File Explorer)를 사용하면 파일과 폴더의 전체 경로를 확인할 수 있습니다. 애플리케이션, 스크립트 또는 PowerShell cmdlet에서 파일과 폴더를 참조해야 할 때 유용할 수 있습니다. 아래 단계에 따라 파일과 폴더의 경로를 찾으세요.

  1. 파일 탐색기(File Explorer)를 열고, 전체 경로를 알고 싶은 파일 또는 폴더가 들어 있는 폴더로 이동합니다.
  2. 원하는 폴더에 들어가면 File Explorer 상단의 주소 표시줄을 클릭합니다. 그러면 전체 경로가 강조 표시됩니다.
  3. 강조 표시된 경로를 마우스 오른쪽 버튼으로 클릭한 다음 컨텍스트 메뉴에서 “복사(Copy)”를 선택하여 전체 경로를 클립보드에 복사하세요.
  4. 특정 파일의 전체 경로가 필요하다면 주소 표시줄에서 경로 끝에 확장자가 포함된 파일 이름을 입력하여 완성하세요. 예: “C:\Backup\Design.txt”.
a screenshot of a backup folder on a computer .

Remove-Item cmdlet을 통해 기본 파일과 폴더 삭제

단일 파일을 삭제하는 방법

PowerShell에서 Remove-Item을 사용해 단일 파일을 삭제하려면 아래 단계를 따르세요.

  1. PowerShell을 여세요.
  2. 삭제하려는 파일의 전체 경로와 함께 “Remove-Item” cmdlet 다음에 “-Path” 매개 변수를 입력하세요.

기본 cmdlet은 다음과 같습니다.

      Remove-Item -Path "C:\Backup\Report.txt"
      

특정 폴더를 삭제하는 방법

특정 폴더를 삭제하려면 아래 cmdlet을 따르세요.

“C:\Backups”에 있는 “OldProjects”라는 폴더를 삭제하려면 다음과 같은 명령을 사용합니다.

      Remove-Item -Path "C:\Backups\OldProjects"
      

여러 파일 및 폴더 삭제

폴더와 그 안의 모든 콘텐츠를 삭제하는 방법

폴더와 그 안의 모든 콘텐츠를 삭제하려면 “-Recurse” 매개변수를 사용하여 폴더와 모든 파일 및 하위 폴더가 함께 삭제되도록 해야 합니다. 이 매개변수가 없으면 cmdlet은 폴더에 파일이나 다른 폴더가 들어 있는 경우 해당 폴더를 삭제하지 않습니다. 아래 예제 cmdlet을 사용할 수 있습니다.

      Remove-Item -Path "C:\Backups\OldDocuments" -Recurse
      

디렉터리에서 여러 파일을 삭제하는 방법

디렉터리 안에서 특정 형식의 모든 파일을 삭제하려면 파일 확장자에 와일드카드(*)를 사용할 수 있습니다. 예를 들어, 특정 폴더의 모든 “.txt” 파일을 삭제하려면 아래 cmdlet을 사용하면 됩니다.

      Remove-Item -Path "C:\Backups\OldDocuments\*.txt"
      

여러 유형의 파일을 삭제하는 방법

디렉터리 안에서 서로 다른 유형의 파일을 삭제하려면 여러 “Remove-Item” 명령을 실행하거나 PowerShell에서 “-Path” 매개변수에 문자열 배열을 받을 수 있는 기능을 사용할 수 있습니다. 하지만 한 번의 명령에서 “-Path” 매개변수에 여러 와일드카드 패턴을 직접 결합하는 것은 지원되지 않습니다. 이 문제는 “Get-ChildItem”을 사용한 뒤 이를 파이프하여 Remove-Item으로 처리하면 됩니다. 예를 들어, 디렉터리에서 “.txt” 및 “.log” 파일을 삭제하려면 아래 예제 cmdlet을 사용합니다.

      Get-ChildItem -Path "C:\Backups\OldDocuments\*.*" -Include *.txt, *.log | Remove-Item
      

특정 여러 파일을 삭제하는 방법

여러 개의 특정 파일을 삭제하려면 PowerShell의 delete file 명령을 사용하여 쉼표로 구분된 여러 경로를 나열할 수 있습니다.

      Remove-Item -Path "C:\Backups\OldDocuments\Design.txt", "C:\Backups\OldBackups\Backup_20_09_2024.bak"
      

와일드카드를 사용해 여러 파일을 삭제하는 방법

여러 파일을 삭제할 때 와일드카드를 사용하려면 명령에 아스테리스크(*) 기호를 사용할 수 있습니다. 아스테리스크는 파일 이름에서 임의의 개수의 문자를 나타낼 수 있는 와일드카드 문자 역할을 하며, 명명 패턴에 따라 한 번에 여러 파일을 대상으로 지정할 수 있게 해줍니다. 아래는 예시입니다.

특정 이름으로 시작하거나 특정 패턴을 포함하는 파일은 PowerShell을 사용해 삭제할 수 있습니다. 예를 들어 파일 확장자와 관계없이 “Report”로 시작하는 파일을 삭제할 수 있습니다.

      Remove-Item -Path "C:\Backups\OldDocuments\Report*"
      

특정 파일 형식을 포함하고 다른 형식은 제외

-Include-Exclude 매개변수는 PowerShell에서 Remove-Item cmdlet을 사용할 때 삭제하려는 파일과 폴더를 필터링하는 데 매우 유용할 수 있습니다.

- 포함 매개 변수

이 매개 변수는 작업에 포함할 항목에 대한 패턴을 지정할 수 있도록 해줍니다. -Path 매개 변수와 함께 사용합니다.

다른 모든 파일은 제외하면서 폴더 안의 모든 .txt 파일을 삭제하려면 아래 cmdlet을 사용하세요.

      Remove-Item -Path "C:\Backup\*" -Include "*.txt"
      

- 제외 매개 변수

이 매개 변수는 작업에서 제외할 항목에 대한 패턴을 지정할 수 있도록 해줍니다.

폴더의 모든 파일은 삭제하되 .txt 파일은 제외하려면 아래 cmdlet을 사용하세요.

      Remove-Item -Path "C:\Backup\*" -Exclude "*.txt"
      

Remote-Item을 통해 읽기 전용 및 숨김 파일 삭제하기

읽기 전용 및 숨김 파일을 삭제하려면 -Force 매개변수를 사용해야 합니다. 이 매개변수는 cmdlet이 일반적으로 항목 삭제를 막는 제한(예: 읽기 전용 또는 숨김 속성)을 무시하도록 해줍니다. 아래 예시 cmdlet을 사용할 수 있습니다.

단일 파일 삭제 방법

단일 파일을 삭제하려면 Remove-item cmdlet에 대해 다음 구문을 사용하세요

      Remove-Item -Path "C:\Backups\Design.txt" -Force
      

와일드카드를 사용하여 디렉터리에서 여러 개의 읽기 전용 또는 숨김 파일을 삭제하는 방법

여러 개의 읽기 전용 또는 숨김 파일을 삭제하려면 다음 구문을 사용하세요:

      Remove-Item -Path "C:\Backups\*.txt" -Force
      

Get-ChildItem cmdlet을 사용하여 특정 디렉터리의 모든 읽기 전용 파일과 숨김 파일을 먼저 가져온 다음, -Force 매개 변수를 사용해 Remove-Item으로 삭제할 수도 있습니다. 아래에는 몇 가지 예가 있습니다.

모든 읽기 전용 파일을 삭제하는 방법

다음 구문을 사용하여 모든 읽기 전용 파일을 삭제합니다.

      Get-ChildItem -Path "C:\Backups" -File -Attributes ReadOnly | Remove-Item -Force
      

디렉터리의 모든 숨김 파일을 삭제하는 방법

다음 구문을 사용하여 모든 숨김 파일을 삭제합니다:

      Get-ChildItem -Path "C:\Backups" -File -Attributes Hidden | Remove-Item -Force
      

읽기 전용 파일과 숨김 파일을 모두 삭제하는 방법

      Get-ChildItem -Path "C:\Backups" -File -Attributes ReadOnly,Hidden | Remove-Item -Force
      

-Recurse를 사용하여 파일과 하위 폴더를 삭제

지정한 디렉터리 안의 파일과 하위 폴더를 삭제하려면 다음을 사용할 수 있습니다. -Recurse 매개변수입니다. 이 매개변수는 해당 항목과 그 모든 하위 항목을 재귀적으로 제거합니다. 디렉터리와 그 안의 모든 콘텐츠(중첩된 모든 파일 및 하위 디렉터리 포함)를 비우고 싶을 때 특히 유용합니다. 아래에 몇 가지 예시가 있습니다.

디렉터리의 모든 파일과 하위 폴더 삭제

      Remove-Item -Path "C:\Backups\*" -Recurse
      

일부 항목이 읽기 전용이거나 숨김 상태라면 -Force 매개변수를 추가할 수 있습니다.

      Remove-Item -Path "C:\Backups\*" -Recurse -Force
      

특수 문자가 포함된 파일 삭제

파일 이름에 특수 문자가 포함되어 있으면, 특수 문자가 PowerShell에서 다르게 해석되거나 특별한 처리가 필요할 수 있어 삭제가 때때로 까다로울 수 있습니다. 아래에 몇 가지 예시가 있습니다.

경로를 따옴표로 묶기

파일 이름에 공백이나 (&, $, #, (), [])와 같은 특수 문자가 포함되어 있으면 경로를 작은따옴표로 묶으세요. 이렇게 하면 PowerShell이 전체 문자열을 경로로 인식하도록 하는 가장 간단한 방법입니다. 작은따옴표를 사용하면 PowerShell이 $를 변수로 확장하지 않게 됩니다.

      Remove-Item -Path 'C:\Backups\$Design(1).txt'
      

특수 문자를 일치시키기 위한 와일드카드

파일을 직접 지정하기 어렵거나 특수 문자가 많은 복잡한 이름이라면, 전체 이름을 입력하지 않고도 파일을 일치시키려면 와일드카드(*)를 사용할 수 있습니다. 예를 들어 파일 이름이 “@#Name(1).txt”인 경우, cmdlet은 아래와 같습니다.

      Remove-Item -Path "C:\Backups\*Name*.txt"
      

대체 데이터 스트림 제거

대체 데이터 스트림(ADS)은 파일이 둘 이상의 데이터 스트림을 포함할 수 있게 해줍니다. 이 기능은 NTFS 파일 시스템에만 해당하며, 파일의 기본 콘텐츠에는 영향을 주지 않으면서 파일에 추가 정보를 저장하는 데 사용할 수 있습니다. 다만 이 기능은 악성 데이터를 숨기는 데 악용될 수 있습니다. 파일에서 대체 데이터 스트림을 제거하려면 스트림 이름을 포함하여 파일의 경로를 지정해야 합니다. 대체 데이터 스트림을 지정하는 구문은 “filename:streamname”입니다.

대체 데이터 스트림(ADS) 식별 방법

파일에 연결된 대체 데이터 스트림이 무엇인지 식별해야 합니다. 이를 위해 아래 cmdlet에 -Stream 매개변수를 사용하면 됩니다.

      Get-Item -Path "C:\Backups\Design.txt" -Stream *
      

방법 대체 데이터 스트림 제거

제거하려는 스트림의 이름을 알게 되면 “Remove-Item”을 사용해 삭제할 수 있습니다. 예를 들어 파일 “Design.txt”에 “hiddenstream”이라는 대체 데이터 스트림이 있고 이를 제거하려는 경우를 가정해 보겠습니다. 아래 cmdlet에서 -Stream 매개변수를 포함해 사용하면, 파일은 삭제하지 않고 스트림만 삭제됩니다.

      Remove-Item -Path “C:\Backups\Design.txt" -Stream hiddenstream
      

특정 조건에 따라 파일 삭제

특정 조건에 따라 파일을 삭제하면 디렉터리 정리를 관리하고 자동화하는 데 도움이 됩니다. 조건은 생성 날짜, 수정 날짜, 크기, 이름 패턴 등 다양한 파일 속성을 기준으로 설정할 수 있습니다. 아래에는 몇 가지 예시 cmdlet이 나와 있습니다.

특정 날짜보다 오래된 파일을 삭제하는 방법

특정 날짜보다 오래된 파일을 삭제하려면 “Get-ChildItem” cmdlet을 사용해 대상 디렉터리의 모든 파일을 나열한 다음, “Where-Object”로 마지막 기록 시간을 기준으로 필터링하고, 마지막으로 “Remove-Item”을 사용해 해당 파일을 삭제하면 됩니다.

      $DateLimit = (Get-Date).AddDays(-30)
Get-ChildItem -Path "C:\Backups\" -File | Where-Object { $_.LastWriteTime -lt $DateLimit } | Remove-Item
      

이 명령은 파일을 영구적으로 삭제합니다. “| Remove-Item” 없이 먼저 명령을 실행해서 어떤 파일이 삭제될지 확인하는 것이 좋은 방법입니다.

      Get-ChildItem -Path "C:\Backups\" -File | Where-Object { $_.LastWriteTime -lt $DateLimit }
      

특정 크기보다 큰 파일을 삭제하는 방법

특정 크기보다 큰 파일을 삭제하려면 Get-ChildItem cmdlet을 사용하고, “Where-Object” cmdlet으로 크기를 기준으로 결과를 필터링한 다음 Remove-Item으로 삭제할 수 있습니다.

      $SizeLimit = 5MB
Get-ChildItem -Path "C:\Backups\" -File -Recurse | Where-Object { $_.Length -gt $SizeLimit } | Remove-Item
      

삭제될 파일이 무엇인지 확인하려면 먼저 “| Remove-Item” 없이 명령을 실행해 보는 것이 좋은 방법입니다.

      Get-ChildItem -Path "C:\Backups\" -File -Recurse | Where-Object { $_.Length -gt $SizeLimit }
      

특성(읽기 전용, 숨김)에 따라 파일을 삭제하는 방법

      Get-ChildItem -Path "C:\Backups\" -File -Attributes Hidden | Remove-Item -Force
      

읽기 전용 또는 숨김 같은 파일 특성을 기준으로 파일을 삭제하려면 Get-ChildItem과, 특성에 따라 파일을 필터링하기 위한 Where-Object를 조합한 다음 Remove-Item으로 삭제하면 됩니다. 읽기 전용 파일을 삭제하려고 하면 -Force 매개변수를 사용하지 않는 한 오류가 발생할 수 있으므로 주의해야 합니다.

      Get-ChildItem -Path "C:\Backups\" -File | Where-Object { $_.Attributes -match "ReadOnly" } | Remove-Item -Force
      

또한 Get-ChildItem에서 -Attributes 매개변수를 사용하고 값을 "read only"로 설정하여 결과를 직접 필터링할 수도 있습니다.

      Get-ChildItem -Path "C:\Backups\" -File -Attributes ReadOnly | Remove-Item -Force
      

숨김 파일도 이와 유사한 방식으로 제거할 수 있습니다.

      Get-ChildItem -Path "C:\Backups\" -File | Where-Object { $_.Attributes -match "Hidden" } | Remove-Item -Force
      

또는 -Attributes 매개변수를 지정하여 삭제할 수도 있습니다.

디렉터리에서 모든 빈 폴더를 삭제하는 방법

Get-ChildItem cmdlet을 사용하여 빈 폴더를 찾은 다음 Remove-Item을 사용해 삭제할 수 있습니다.

      Get-ChildItem -Path "C:\Backups\" -Directory -Recurse | Where-Object { $_.GetFileSystemInfos().Count -eq 0 } | Remove-Item -Force
      

빈 폴더 중 실제로 삭제하기 전에 어떤 폴더가 삭제될지 확인하려면 Remove-Item -Force를 Select-Object FullName으로 바꾸세요.

      Get-ChildItem -Path "C:\Backups\" -Directory -Recurse | Where-Object { $_.GetFileSystemInfos().Count -eq 0 } | Select-Object FullName
      

엄선된 관련 콘텐츠:

모범 사례 및 흔한 함정

Remove-Item PowerShell cmdlet은 파일과 디렉터리를 삭제하는 강력한 방법이지만, 어떤 강력한 도구처럼 의도하지 않은 결과를 방지하려면 신중하게 다뤄야 합니다. 아래는 “파일 삭제” 항목 경로를 사용할 때의 모범 사례와 흔한 함정입니다.

Remove-Item Cmdlet 사용 시 모범 사례

  • 중요한 파일이나 디렉터리를 삭제할 수 있는 명령을 실행하기 전에 -WhatIf 매개 변수를 추가하세요. 이 옵션을 사용하면 실제로 삭제를 수행하지 않고 명령을 시뮬레이션하여, 어떤 항목에 영향을 줄지 확인할 수 있습니다.
  • 추가적인 보호를 위해, 특히 여러 항목을 한꺼번에 삭제하는 스크립트나 명령을 실행할 때는 -Confirm 매개 변수를 사용하세요. PowerShell이 각 삭제마다 확인을 요청하므로 데이터가 실수로 손실되는 것을 방지할 수 있습니다.
  • 잘못된 파일이나 디렉터리가 삭제되지 않도록 제거하려는 항목의 전체 경로를 지정하세요. 이렇게 하면 명령이 의도한 항목만을 정확히 대상으로 하도록 보장하는 데 도움이 됩니다.
  • -Recurse 매개 변수는 디렉터리와 그 안의 내용을 삭제할 때 매우 유용하지만, 주의해서 사용하지 않으면 데이터 손실로 이어질 수 있습니다. 삭제될 항목이 무엇인지 항상 확인하세요. 먼저 Get-ChildItem로 목록을 출력하거나, Remove-Item 명령에 -WhatIf를 사용하면 됩니다.
  • 삭제 중에 발생하는 오류를 PowerShell이 어떻게 처리할지 지정하려면 -ErrorAction을 사용하세요. 스크립트에서는 예외를 보다 효과적으로 관리하기 위해 Remove-Item 명령을 try/catch 블록으로 감싸는 것을 고려해 보세요.
  • 다수의 파일 또는 중요 데이터에 영향을 주는 삭제 명령을 실행하기 전에, 최신 백업이 준비되어 있는지 확인하세요.
  • Remove-Item을 포함하는 스크립트를 작성할 때는 코드를 충분히 문서화하세요. 항목이 삭제되는 이유와, 고려하여 적용한 구체적인 사항을 설명하십시오.
  • 삭제를 수행하는 스크립트와 명령을 정기적으로 검토하고 점검하여, 현재의 요구사항을 여전히 충족하고 모범 사례를 준수하는지 확인하세요.
  • 대량 삭제를 스크립팅할 때는 우발적인 데이터 손실을 방지하기 위해 먼저 운영 환경이 아닌 환경에서 테스트하세요.

자주 발생하는 실수

  • 여러 파일 또는 디렉터리를 한 번에 대상으로 지정할 수 있게 해 주는 와일드카드(*)는 의도하지 않은 항목을 삭제할 위험도 함께 높일 수 있습니다. 사용 시 주의하고, 어떤 항목이 영향을 받는지 항상 확인하세요.
  • 기본적으로 Remove-Item은 -Force 매개변수를 사용하지 않는 한 읽기 전용 및 숨김 파일을 삭제하지 않습니다.
  • 필요한 권한이 없는 상태에서 파일이나 디렉터리를 삭제하려고 하면 오류가 발생할 수 있습니다. PowerShell을 관리자 권한으로 실행하면 이러한 문제 중 일부를 해결할 수 있습니다.
  • NTFS 파일 시스템은 대체 데이터 스트림과 같은 기능을 지원하며, 삭제 작업 중에 이러한 기능이 간과될 수 있습니다. 대체 스트림이 있을 가능성이 의심되는 경우 -Stream 매개변수를 포함하세요.

안전한 삭제를 위해 -WhatIf 및 -Confirm 사용

파일 또는 디렉터리를 삭제할 때 Remove-Item을 사용하는 경우, -WhatIf 및 -Confirm 매개변수는 작업의 안전성을 크게 향상시킬 수 있습니다. 이러한 매개변수는 작업을 실행하기 전에 해당 작업의 미리보기를 제공하거나 확인을 요청함으로써 실수로 인한 삭제를 방지하는 데 도움이 됩니다.

-WhatIf

-WhatIf 매개변수는 실제로 어떤 변경도 수행하지 않고 명령의 실행을 시뮬레이션합니다.

      Remove-Item -Path "C:\Backups\Design.txt" -WhatIf
      
Image

-Confirm

-Confirm 매개변수는 실제 삭제가 일어나기 전에 각 삭제 작업을 확인하도록 요청합니다.

      Remove-Item -Path "C:\Backups\Design.txt" -Confirm
      
Image

일반적인 오류 처리(Access Denied, File Not Found)

Remove-Item cmdlet을 사용할 때 “Access Denied” 또는 “File Not Found”와 같은 일반적인 오류가 발생할 수 있습니다.

Access Denied 오류

이 오류는 PowerShell에서 파일 또는 디렉터리를 삭제하는 데 필요한 권한이 없는 경우 발생합니다.

  • -Force 매개 변수는 읽기 전용 파일의 삭제를 허용함으로써 이 오류를 때때로 해결할 수 있지만, 보안 권한을 재정의하진 않습니다.
  • -Force가 작동하지 않으면 파일 또는 디렉터리 권한을 수동으로 조정해야 할 수 있습니다. Windows 탐색기에서 파일 또는 폴더 속성을 통해 권한을 변경하거나 “Set-Acl” 같은 PowerShell cmdlet을 사용할 수 있습니다.
  • PowerShell 세션을 관리자 권한으로(높은 권한으로) 실행하면 삭제에 더 높은 권한이 필요한 파일에 대해 “Access Denied” 오류를 우회하는 데 도움이 될 수 있습니다.

파일을 찾을 수 없음 오류

이 오류는 Remove-Item에 지정한 경로가 존재하지 않을 때 발생합니다.

  • 먼저 삭제하려는 경로가 실제로 존재하는지 확인하세요. 오타나 잘못된 경로 지정은 이 오류의 흔한 원인입니다.
  • 삭제를 시도하기 전에 “Test-Path”를 사용해 파일 또는 디렉터리가 존재하는지 확인하세요. 이를 통해 오류가 발생하는 것을 방지할 수 있습니다.
      if (Test-Path "C:\Backups\Design.txt") {
    Remove-Item -Path "C:\ Backups\Design.txt"
} else {
    Write-Host "File not found."
}
      
Image
  • “-ErrorAction SilentlyContinue”를 사용하면 오류 메시지를 숨길 수 있습니다. 이는 누락된 파일이 치명적인 실패로 간주되지 않는 스크립트에서 유용합니다.
      Remove-Item -Path "C:\ Backups\Design.txt" -ErrorAction SilentlyContinue
      

엄선된 관련 콘텐츠:

실제 시나리오

임시 파일 정리

아래 cmdlet을 사용하여 “C:\Temp” 디렉터리의 파일을 삭제하세요.

      Get-ChildItem -Path C:\Temp\* -Recurse | Remove-Item -WhatIf
      

-WhatIf 매개변수를 사용했으므로 이 cmdlet은 아래와 같이 출력 결과를 표시합니다. -WhatIf를 제거한 뒤 cmdlet을 다시 실행하여 임시 디렉터리의 모든 파일을 삭제하세요.

Image

오래된 로그 아카이빙 및 삭제

30일 이상 지난 “.log” 파일을 한 위치에서 다른 위치로 이동한 다음, 보관(아카이브)에서 90일 이상 지난 로그를 삭제하세요.

      $sourcePath = "C:\Backups"
$archivePath = "C:\ArchivedLogs"
Get-ChildItem -Path $sourcePath\*.log -Recurse | Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-30) } | ForEach-Object {
Move-Item -Path $_.FullName -Destination $archivePath -WhatIf
}
      

“ -WhatIf ”로 작업을 검토한 다음, 진행하려면 “ -WhatIf ”를 제거하세요.

위 스크립트는 30일이 지난 “Backups” 폴더의 모든 파일을 “ArchivedLogs”로 이동합니다. 이제 아래 cmdlet을 실행하여 90일이 된 Archive 폴더의 오래된 로그를 삭제할 수 있습니다.

      Get-ChildItem -Path $archivePath\*.log -Recurse | Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-90) } | Remove-Item -WhatIf
      

대상을 확인한 다음 “-WhatIf” 없이 실행하세요.

결론

Remove-Item cmdlet은 하나 또는 여러 항목(주로 파일과 디렉터리)을 삭제하도록 설계되었습니다. 그러나 이 cmdlet의 기능은 파일과 폴더에만 국한되지 않으며, 레지스트리 키와 변수의 삭제까지 포함해 더 넓게 확장됩니다. Remove-Item에서 가장 중요한 측면 중 하나는 안전성입니다. 파일과 디렉터리를 신중하게 처리하지 않으면 삭제 작업이 되돌릴 수 없는 결과를 초래할 수 있습니다. Remove-Item은 -WhatIf 및 -Confirm 파라미터를 사용해 이러한 작업을 안전하게 수행할 수 있도록 하는 메커니즘을 제공합니다. Remove-Item은 정기적인 정리 작업을 자동화하거나 파일 시스템을 더 효율적으로 관리하기 위한 스크립트에 포함될 수 있으며, 임시 파일을 주기적으로 제거하거나 더 이상 필요하지 않은 로그 파일을 정리하는 데에도 사용할 수 있습니다. 와일드카드와 필터를 사용할 수 있다는 점은, 특정 패턴이나 조건을 기준으로 파일이나 폴더를 삭제해야 하는 상황에서 특히 유용하게 만듭니다.

초보자를 위한 Windows PowerShell 스크립팅 튜토리얼 (PDF)

자세히 알아보기

FAQ

공유하기

더 알아보기

저자 소개

Asset Not Found

Kevin Horvatin

수석 소프트웨어 아키텍트

Kevin Horvatin은 Netwrix의 수석 소프트웨어 아키텍트이며 Netwrix Privilege Secure를 담당하고 있습니다. 20년 넘게 소프트웨어 개발자로 일해 왔으며, PowerShell과 C#이 처음 소개된 시점부터 이를 다뤄 왔습니다.