fkshareware |
02-04-2023 10:43 3006557 |
Удаление файлов бэкапа с фильтром по времени.
Добрый день.
Напишите пожалуйста скрипт, или дайте ссылку на тему если уже обсуждалось, который удалял бы файлы из папки с бэкапами, кроме файлов за последнюю неделю, кроме файлов за каждое воскресенье в течение месяца и кроме файлов за каждое 1 число в течение года.
Есть папка, в которую ежедневно делаются бекапы в формате .zip (один раз, а может и два раза в день). Нужен скрипт, который удалял бы все файлы из данной папки, но оставил бы в ней:
- файлы за последние 7 дней
- файлы созданные каждое воскресенье в течение месяца
- файлы созданные каждое первое число месяца в течение года
Заранее благодарю за потраченное время!
|
Цитата:
Цитата fkshareware
Есть папка, в которую ежедневно делаются бекапы в формате .zip (один раз, а может и два раза в день). »
|
Какой формат имеют имена файлов? Там присутствует дата/время? Приведите пример
|
fkshareware |
02-04-2023 12:03 3006560 |
Цитата:
Цитата megaloman
Какой формат имеют имена файлов? Там присутствует дата/время? Приведите пример »
|

|
в PS наверное что-то типа этого
Код:
$seven = (Get-Date).AddDays(-7);
Get-ChildItem d:\TMP *.zip -File | Where-Object {$fdate = $_.LastWriteTime; $fdate -lt $seven -and $fdate.Day -ne 1 -and $fdate.DayOfWeek -ne 0} | Remove-Item
не надо картинки на зловредах публиковать
|
Цитата:
Цитата fkshareware
Есть папка, в которую ежедневно делаются бекапы в формате .zip (один раз, а может и два раза в день). Нужен скрипт, который удалял бы все файлы из данной папки, но оставил бы в ней:
- файлы за последние 7 дней »
|
удаление старше 7дн
Код:
FORFILES /p D:\backup\ /s /m *.* /d -7 /c "CMD /c del /Q @FILE"
каждое первое число месяца в течение года
Код:
$src = 'd:\backup'
$dst = 'd:\archive'
Get-ChildItem $src -File -Recurse | Where-Object {$_.LastWriteTime.Day -eq 1 } | Copy-Item -Destination $dst -WhatIf
каждое воскресенье в течение месяца
Код:
$Source_Path = "D:\Backup"
$folder_content = Get-ChildItem -LiteralPath $Source_Path
$Destination_Path = "D:\archive"
$Curr_date = get-date
Foreach($file in (Get-ChildItem -Recurse $folder_content))
{
if($file.CreationTime.DayOfWeek -eq "Sunday")
{
Copy-Item -Path $file.fullname -Destination $Destination_Path
}
}
раскидать 3 задания в планировщике
|
fkshareware |
03-04-2023 09:28 3006599 |
Цитата:
Цитата Sham
$seven = (Get-Date).AddDays(-7);
Get-ChildItem d:\TMP *.zip -File | Where-Object {$fdate = $_.LastWriteTime; $fdate -lt $seven -and $fdate.Day -ne 1 -and $fdate.DayOfWeek -ne 0} »
|
Нет, не то. Странная выборка получается:

|
Цитата:
Цитата fkshareware
Странная выборка получается: »
|
Попробуйте сформулировать, что именно странного в этой выборке? Но помните, что это список файлов на удаление... есть в этом списке файлы, не соответствующие Вашим условиям? :)
|
DJ Mogarych |
03-04-2023 11:25 3006615 |
Powershell:
Код:
$t = get-date
$keep,$del = (dir d:\temp\*.zip).where({
$_.LastWriteTime -ge $t.Date.AddDays(-7) -or `
($_.LastWriteTime -ge $t.Date.AddMonths(-1) -and $_.LastWriteTime.DayOfWeek -eq "Sunday") -or `
($_.LastWriteTime -ge $t.Date.AddYears(-1) -and $_.LastWriteTime.Day -eq 1)
}, 'Split')
del $del -WhatIf
Сильно не проверял. Уберите -Whatif, чтобы реально удаляло. С -Whatif он только выведет лог, что бы он сделал.
|
fkshareware |
03-04-2023 11:47 3006621 |
Цитата:
Цитата YuS_2
Попробуйте сформулировать, что именно странного в этой выборке? Но помните, что это список файлов на удаление... есть в этом списке файлы, не соответствующие Вашим условиям? »
|
Точно. Я туплю. Спасибо, буду проверять.
|
fkshareware, только условия необходимо уточнить, а то ведь там разночтения возможны...
"В течении месяца" - какого месяца? Последнего, любого, каждого?
"В течении года" - те же вопросы...
|
Время: 23:55.
© OSzone.net 2001-