Показать полную графическую версию : Удаление файлов бэкапа с фильтром по времени.
fkshareware
02-04-2023, 10:43
Добрый день.
Напишите пожалуйста скрипт, или дайте ссылку на тему если уже обсуждалось, который удалял бы файлы из папки с бэкапами, кроме файлов за последнюю неделю, кроме файлов за каждое воскресенье в течение месяца и кроме файлов за каждое 1 число в течение года.
Есть папка, в которую ежедневно делаются бекапы в формате .zip (один раз, а может и два раза в день). Нужен скрипт, который удалял бы все файлы из данной папки, но оставил бы в ней:
- файлы за последние 7 дней
- файлы созданные каждое воскресенье в течение месяца
- файлы созданные каждое первое число месяца в течение года
Заранее благодарю за потраченное время!
megaloman
02-04-2023, 11:40
Есть папка, в которую ежедневно делаются бекапы в формате .zip (один раз, а может и два раза в день). »Какой формат имеют имена файлов? Там присутствует дата/время? Приведите пример
fkshareware
02-04-2023, 12:03
Какой формат имеют имена файлов? Там присутствует дата/время? Приведите пример »
https://i121.fastpic.org/thumb/2023/0402/5e/2e696b2aa0b40375c41fe019d08a745e.jpeg (https://fastpic.org/view/121/2023/0402/2e696b2aa0b40375c41fe019d08a745e.png.html)
в 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
не надо картинки на зловредах публиковать
Есть папка, в которую ежедневно делаются бекапы в формате .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
$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} »
Нет, не то. Странная выборка получается:
https://i121.fastpic.org/thumb/2023/0403/e8/aa96fc32c75e1bd2510cdb194cf8cee8.jpeg (https://fastpic.org/view/121/2023/0403/aa96fc32c75e1bd2510cdb194cf8cee8.png.html)
Странная выборка получается: »
Попробуйте сформулировать, что именно странного в этой выборке? Но помните, что это список файлов на удаление... есть в этом списке файлы, не соответствующие Вашим условиям? :)
DJ Mogarych
03-04-2023, 11:25
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
Попробуйте сформулировать, что именно странного в этой выборке? Но помните, что это список файлов на удаление... есть в этом списке файлы, не соответствующие Вашим условиям? »
Точно. Я туплю. Спасибо, буду проверять.
fkshareware, только условия необходимо уточнить, а то ведь там разночтения возможны...
"В течении месяца" - какого месяца? Последнего, любого, каждого?
"В течении года" - те же вопросы...
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.