etherlord
16-03-2016, 19:39
Здравствуйте, стала задача удалять файлы из папок с бекапами, по заданным критериям:
оставлять 1 файл в день старше Д дней
оставлять 1 файл в неделю старше Н недель
и 1 файл\мес старше М Месяцев.
пока только работаю над логикой и вот что получается:
Param(
[Parameter(Mandatory=$true)][string]$path,
[Parameter(Mandatory=$false)][int]$days,
[Parameter(Mandatory=$false)][int]$weeks,
[Parameter(Mandatory=$false)][int]$month,
)
$date = Get-date
$day = days
do {
gci $path |
Where-Object { ($_.LastWriteTime -lt (get-date).AddDays(-$day)) -and
($_.LastWriteTime -gt (get-date).AddDays(-$day+1)) -and
!$_.PSIsContainer
} | Select -Skip 1 | Remove-Item -Force -WhatIf
$day++
until ($day -gt ($weeks*7))
$currentWeek=$weeks
do {
gci $path |
Where-Object { ($_.LastWriteTime -lt (get-date).AddDays(-($currentWeek*7))) -and
($_.LastWriteTime -gt (get-date).AddDays(-(($currentWeek+1)*7))) -and
!$_.PSIsContainer
} | Select -Skip 1 | Remove-Item -Force -WhatIf
$currentWeek++
until ((get-date).AddDays(-($currentWeek*7)) -lt (get-date).AddMonths(-($month)))
$currentMonth=$month
do {
gci $path |
Where-Object { ($_.LastWriteTime -lt (get-date).AddMonths(-$currentMonth)) -and
($_.LastWriteTime -gt (get-date).AddMonths(-($currentMonth+1))) -and
!$_.PSIsContainer
} | Select -Skip 1 | Remove-Item -Force -WhatIf
$currentMonth++
until ($currentMonth -gt 12)
Собственно вопрос насколько корректо я это написал, и как остановить скрипт, пока он не ушел в 1980 или еще глубже.
Так же меня беспокоит что будет море запросов, если например на сервере хранится миллион файлов, то этот скипт создат прямо таки IOPs шторм.
оставлять 1 файл в день старше Д дней
оставлять 1 файл в неделю старше Н недель
и 1 файл\мес старше М Месяцев.
пока только работаю над логикой и вот что получается:
Param(
[Parameter(Mandatory=$true)][string]$path,
[Parameter(Mandatory=$false)][int]$days,
[Parameter(Mandatory=$false)][int]$weeks,
[Parameter(Mandatory=$false)][int]$month,
)
$date = Get-date
$day = days
do {
gci $path |
Where-Object { ($_.LastWriteTime -lt (get-date).AddDays(-$day)) -and
($_.LastWriteTime -gt (get-date).AddDays(-$day+1)) -and
!$_.PSIsContainer
} | Select -Skip 1 | Remove-Item -Force -WhatIf
$day++
until ($day -gt ($weeks*7))
$currentWeek=$weeks
do {
gci $path |
Where-Object { ($_.LastWriteTime -lt (get-date).AddDays(-($currentWeek*7))) -and
($_.LastWriteTime -gt (get-date).AddDays(-(($currentWeek+1)*7))) -and
!$_.PSIsContainer
} | Select -Skip 1 | Remove-Item -Force -WhatIf
$currentWeek++
until ((get-date).AddDays(-($currentWeek*7)) -lt (get-date).AddMonths(-($month)))
$currentMonth=$month
do {
gci $path |
Where-Object { ($_.LastWriteTime -lt (get-date).AddMonths(-$currentMonth)) -and
($_.LastWriteTime -gt (get-date).AddMonths(-($currentMonth+1))) -and
!$_.PSIsContainer
} | Select -Skip 1 | Remove-Item -Force -WhatIf
$currentMonth++
until ($currentMonth -gt 12)
Собственно вопрос насколько корректо я это написал, и как остановить скрипт, пока он не ушел в 1980 или еще глубже.
Так же меня беспокоит что будет море запросов, если например на сервере хранится миллион файлов, то этот скипт создат прямо таки IOPs шторм.