[powershell] PowerShell을 사용하여 15 일이 지난 파일 삭제

특정 폴더에서 15 일 이상 전에 작성된 파일 만 삭제하고 싶습니다. PowerShell을 사용하여이 작업을 어떻게 수행 할 수 있습니까?



답변

주어진 답변은 파일 만 삭제하지만 (이 게시물의 제목에 있음) 15 일 이전의 모든 파일을 먼저 삭제 한 다음 남아있을 수있는 빈 디렉토리를 재귀 적으로 삭제하는 코드가 있습니다. 뒤에. 내 코드는 -Force옵션을 사용하여 숨김 및 읽기 전용 파일도 삭제합니다. 또한, 나는 영업 이익은 PowerShell을 새로운 같이 별칭을 사용하지 않도록 선택하고 무엇을 이해하지 수 gci, ?, %있다, 등.

$limit = (Get-Date).AddDays(-15)
$path = "C:\Some\Path"

# Delete files older than the $limit.
Get-ChildItem -Path $path -Recurse -Force | Where-Object { !$_.PSIsContainer -and $_.CreationTime -lt $limit } | Remove-Item -Force

# Delete any empty directories left behind after deleting the old files.
Get-ChildItem -Path $path -Recurse -Force | Where-Object { $_.PSIsContainer -and (Get-ChildItem -Path $_.FullName -Recurse -Force | Where-Object { !$_.PSIsContainer }) -eq $null } | Remove-Item -Force -Recurse

물론 실제로 삭제하기 전에 어떤 파일 / 폴더가 삭제되는지 확인하려면 -WhatIf스위치를Remove-Item 두 줄의 끝에서 cmdlet 호출에 됩니다.

여기에 표시된 코드는 PowerShell v2.0과 호환되지만이 코드와 더 빠른 PowerShell v3.0 코드 를 내 블로그에서 편리한 재사용 가능한 함수 로 표시 합니다 .


답변

그냥 간단하게 (PowerShell V5)

Get-ChildItem "C:\temp" -Recurse -File | Where CreationTime -lt  (Get-Date).AddDays(-15)  | Remove-Item -Force


답변

다른 방법은 현재 날짜에서 15 일을 빼고 CreationTime해당 값 과 비교 하는 것입니다.

$root  = 'C:\root\folder'
$limit = (Get-Date).AddDays(-15)

Get-ChildItem $root -Recurse | ? {
  -not $_.PSIsContainer -and $_.CreationTime -lt $limit
} | Remove-Item


답변

기본적으로 주어진 경로에서 파일을 반복 CreationTime하고 현재 시간에서 찾은 각 파일을 빼고 Days결과 의 속성 과 비교 합니다. -WhatIf실제로 (파일이 삭제 될) 파일을 삭제하지 않고 무슨 일이 일어날 지 실제로 파일을 삭제하려면 스위치는 스위치를 제거, 당신을 말할 것이다 :

$old = 15
$now = Get-Date

Get-ChildItem $path -Recurse |
Where-Object {-not $_.PSIsContainer -and $now.Subtract($_.CreationTime).Days -gt $old } |
Remove-Item -WhatIf


답변

이 시도:

dir C:\PURGE -recurse |
where { ((get-date)-$_.creationTime).days -gt 15 } |
remove-item -force


답변

Esperento57의 스크립트는 이전 PowerShell 버전에서 작동하지 않습니다. 이 예제는 다음을 수행합니다.

Get-ChildItem -Path "C:\temp" -Recurse -force -ErrorAction SilentlyContinue | where {($_.LastwriteTime -lt  (Get-Date).AddDays(-15) ) -and (! $_.PSIsContainer)} | select name| Remove-Item -Verbose -Force -Recurse -ErrorAction SilentlyContinue


답변

다른 대안 (15.은 [timespan]으로 자동 입력 됨) :

ls -file | where { (get-date) - $_.creationtime -gt 15. } | Remove-Item -Verbose