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에서 파일과 폴더를 참조해야 할 때 유용할 수 있습니다. 아래 단계에 따라 파일과 폴더의 경로를 찾으세요.
- 파일 탐색기(File Explorer)를 열고, 전체 경로를 알고 싶은 파일 또는 폴더가 들어 있는 폴더로 이동합니다.
- 원하는 폴더에 들어가면 File Explorer 상단의 주소 표시줄을 클릭합니다. 그러면 전체 경로가 강조 표시됩니다.
- 강조 표시된 경로를 마우스 오른쪽 버튼으로 클릭한 다음 컨텍스트 메뉴에서 “복사(Copy)”를 선택하여 전체 경로를 클립보드에 복사하세요.
- 특정 파일의 전체 경로가 필요하다면 주소 표시줄에서 경로 끝에 확장자가 포함된 파일 이름을 입력하여 완성하세요. 예: “C:\Backup\Design.txt”.
Remove-Item cmdlet을 통해 기본 파일과 폴더 삭제
단일 파일을 삭제하는 방법
PowerShell에서 Remove-Item을 사용해 단일 파일을 삭제하려면 아래 단계를 따르세요.
- PowerShell을 여세요.
- 삭제하려는 파일의 전체 경로와 함께 “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
-Confirm
-Confirm 매개변수는 실제 삭제가 일어나기 전에 각 삭제 작업을 확인하도록 요청합니다.
Remove-Item -Path "C:\Backups\Design.txt" -Confirm
일반적인 오류 처리(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."
}
- “-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을 다시 실행하여 임시 디렉터리의 모든 파일을 삭제하세요.
오래된 로그 아카이빙 및 삭제
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
공유하기
더 알아보기
저자 소개
Kevin Horvatin
수석 소프트웨어 아키텍트
Kevin Horvatin은 Netwrix의 수석 소프트웨어 아키텍트이며 Netwrix Privilege Secure를 담당하고 있습니다. 20년 넘게 소프트웨어 개발자로 일해 왔으며, PowerShell과 C#이 처음 소개된 시점부터 이를 다뤄 왔습니다.