Удаление устаревших файлов с учетом минимального количества файлов
Время чтения: 1 мин.
1082 просмотров
Данный скрипт позволяет автоматически удалять файлы в каталоге, возраст которых превышает заданное количество дней. Однако, если общее количество файлов в каталоге меньше установленного порога, удаление не будет выполнено. Скрипт может быть полезен для управления архивами, например, при удалении старых резервных копий 1С или других систем.
Основные параметры:
$path
– массив, содержащий пути к каталогам, где находятся файлы;$liveTimeDays
– период хранения файлов в днях. Все файлы, которые старше этого срока, будут помечены для удаления;$minFileCounts
– минимальное количество файлов, которые должны остаться в каталоге, даже если они старше указанного срока хранения в переменной$liveTimeDays
.
$path = @('С:\PATH_1', 'F:\PATH_2');
$liveTimeDays = 7;
$minFileCount = 7;
for ($index = 0; $index -lt $path.count; $index++)
{
# Проверка на существование каталога
if (-not (Test-Path -Path $path[$index])) {
continue;
}
# Получаем дату с которой удалять файлы
$date = (Get-Date).AddDays($liveTimeDays * -1)
# Получаем отфильтрованные по дате файлы исключая каталоги
$files = Get-ChildItem -Recurse -Path $path[$index] | Where-Object { -not $_.PSIsContainer } | Where-Object -Property CreationTime -lt $date;
foreach ($file in $files) {
$dirs = Get-ChildItem $path[$index] -Recurse | Where-Object { -not $_.PSIsContainer };
if ($dirs.Count -le $minFileCount) {
continue;
}
Write-Output $file.FullName
Remove-Item $file.FullName
}
}
В этом примере из каталогов C:\PATH_1
и F:\PATH_2
, а также их подкаталогов, будут удалены все файлы, возраст которых превышает 7 дней. Если в каком-либо каталоге окажется менее 7 файлов, удаление в этом каталоге произведено не будет.
Запуск скрипта можно настроить с помощью Планировщика задач Windows. Инструкции по настройке можно найти в документации.