|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - Удаление файлов старше Д дней, Н недель, М месяцев |
|
PowerShell - Удаление файлов старше Д дней, Н недель, М месяцев
|
Пользователь Сообщения: 72 |
Профиль | Отправить PM | Цитировать Здравствуйте, стала задача удалять файлы из папок с бекапами, по заданным критериям:
оставлять 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) Так же меня беспокоит что будет море запросов, если например на сервере хранится миллион файлов, то этот скипт создат прямо таки IOPs шторм. |
|
Отправлено: 19:39, 16-03-2016 |
Забанен Сообщения: 793
|
Дык понятное дело: обращение по нескольку раз к одной и той же папке с пропуском полученных данных всякий раз через цикл само по себе не есть гуд и создаст некислую нагрузку. Намного проще (и логичнее) сделать один запрос к папке с сортировкой и записью полученных данных в переменную. Например:
$date = Get-Date $data = ls | ? {!$_.PSIsContainer} | select @{ N='Exists';E={($date - $_.CreationTime).Days} }, FullName | sort Exists По аналогии - недели и месяцы, единственно, что их придется перевести в количество дней (недели: ($date - $date.AddDays(-(7 * $NumberOfWeeks))).Days, месяцы: ($date - $date.AddMonths(-$NumberOfMonths)).Days). Суть, полагаю, ясна. |
Отправлено: 10:02, 17-03-2016 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Пользователь Сообщения: 72
|
Профиль | Отправить PM | Цитировать Цитата greg zakharov:
И, скажите пожалуйста, почему полный путь безопаснее получается? |
|
Отправлено: 15:41, 17-03-2016 | #3 |
Забанен Сообщения: 793
|
Цитата etherlord:
|
|
Отправлено: 16:54, 17-03-2016 | #4 |
Пользователь Сообщения: 72
|
Профиль | Отправить PM | Цитировать Цитата greg zakharov:
как я понимаю Ваш запрос вернет первый файл, которой младше 17 дней. , но как перебирать что-бы 1 файл из 1одного дня? |
||
Отправлено: 23:54, 17-03-2016 | #5 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - [решено] Архивирование и удаление файлов в папке старше n дней | ryoryoryo | Скриптовые языки администрирования Windows | 14 | 09-04-2021 15:19 | |
2012 R2 - [решено] Удаление файлов старше 100 дней | DJ Mogarych | Windows Server 2012/2012 R2 | 6 | 07-06-2014 02:16 | |
Любой язык - [решено] Удаление файлов старше N дней | DOCznet | Скриптовые языки администрирования Windows | 2 | 27-09-2012 11:42 | |
VBS/WSH/JS - [решено] Удаление файлов по сети старше 7 дней, оставлять не менее 10 файлов | white155 | Скриптовые языки администрирования Windows | 6 | 04-01-2012 00:42 | |
Прочее - удаление файлов старше 10 дней | admin666 | Общий по Linux | 1 | 23-07-2009 19:09 |
|