CMD/BAT - Удаление файлов бэкапа с фильтром по времени.

Ответить
Аватара пользователя
fkshareware

CMD/BAT - Удаление файлов бэкапа с фильтром по времени.

Сообщение fkshareware »

Добрый день.



Напишите пожалуйста скрипт, или дайте ссылку на тему если уже обсуждалось, который удалял бы файлы из папки с бэкапами, кроме файлов за последнюю неделю, кроме файлов за каждое воскресенье в течение месяца и кроме файлов за каждое 1 число в течение года.



Есть папка, в которую ежедневно делаются бекапы в формате .zip (один раз, а может и два раза в день). Нужен скрипт, который удалял бы все файлы из данной папки, но оставил бы в ней:

- файлы за последние 7 дней

- файлы созданные каждое воскресенье в течение месяца

- файлы созданные каждое первое число месяца в течение года



Заранее благодарю за потраченное время!
Аватара пользователя
megaloman

Re: CMD/BAT - Удаление файлов бэкапа с фильтром по времени.

Сообщение megaloman »

Цитата fkshareware:



Есть папка, в которую ежедневно делаются бекапы в формате .zip (один раз, а может и два раза в день).
CMD/BAT - Удаление файлов бэкапа с фильтром по времени.




Какой формат имеют имена файлов? Там присутствует дата/время? Приведите пример
Аватара пользователя
fkshareware

Re: CMD/BAT - Удаление файлов бэкапа с фильтром по времени.

Сообщение fkshareware »

Цитата megaloman:



Какой формат имеют имена файлов? Там присутствует дата/время? Приведите пример
CMD/BAT - Удаление файлов бэкапа с фильтром по времени.




Аватара пользователя
Sham

Re: CMD/BAT - Удаление файлов бэкапа с фильтром по времени.

Сообщение Sham »

в 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

не надо картинки на зловредах публиковать
Аватара пользователя
John87

Re: CMD/BAT - Удаление файлов бэкапа с фильтром по времени.

Сообщение John87 »

Цитата fkshareware:



Есть папка, в которую ежедневно делаются бекапы в формате .zip (один раз, а может и два раза в день). Нужен скрипт, который удалял бы все файлы из данной папки, но оставил бы в ней:

- файлы за последние 7 дней
CMD/BAT - Удаление файлов бэкапа с фильтром по времени.




удаление старше 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

Re: CMD/BAT - Удаление файлов бэкапа с фильтром по времени.

Сообщение fkshareware »

Цитата 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}
CMD/BAT - Удаление файлов бэкапа с фильтром по времени.




Нет, не то. Странная выборка получается:

Аватара пользователя
YuS_2

Re: CMD/BAT - Удаление файлов бэкапа с фильтром по времени.

Сообщение YuS_2 »

Цитата fkshareware:



Странная выборка получается:
CMD/BAT - Удаление файлов бэкапа с фильтром по времени.




Попробуйте сформулировать, что именно странного в этой выборке? Но помните, что это список файлов на удаление... есть в этом списке файлы, не соответствующие Вашим условиям? Изображение
Аватара пользователя
DJ Mogarych

Re: CMD/BAT - Удаление файлов бэкапа с фильтром по времени.

Сообщение DJ Mogarych »

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

Re: CMD/BAT - Удаление файлов бэкапа с фильтром по времени.

Сообщение fkshareware »

Цитата YuS_2:



Попробуйте сформулировать, что именно странного в этой выборке? Но помните, что это список файлов на удаление... есть в этом списке файлы, не соответствующие Вашим условиям?
CMD/BAT - Удаление файлов бэкапа с фильтром по времени.




Точно. Я туплю. Спасибо, буду проверять.
Аватара пользователя
YuS_2

Re: CMD/BAT - Удаление файлов бэкапа с фильтром по времени.

Сообщение YuS_2 »

fkshareware, только условия необходимо уточнить, а то ведь там разночтения возможны...

"В течении месяца" - какого месяца? Последнего, любого, каждого?

"В течении года" - те же вопросы...
Ответить

Вернуться в «Скриптовые языки администрирования Windows»