
В настоящее время я автоматически создаю резервную копию конфигураций моего коммутатора/маршрутизатора каждый раз, когда мы записываем изменения... Это делается путем отправки текстового файла в папку по FTP.
Я пытаюсь написать скрипт, который удалит все файлы в каталоге старше 15 дней. Однако я хочу сохранить последний файл для каждого устройства, даже если он старше 15 дней.
Формат именования файлов следующий: Последнее имя файла — Hostname-Config-Change.txt, при его перезаписи более новым изменением он переименовывается в: Hostname-Config-Change_MM-DD-YY_HH-MM-SS_Time.txt
Я думаю, что самый простой способ сделать это — удалить все файлы старше 15 дней с датой и временем в имени. Я понятия не имею, как к этому подойти, и хотя я нашел способы сделать любой из этих способов, я не нашел способа сделать оба.
Заранее благодарим за любую помощь, которую вы можете оказать.
Вот мой код на данный момент. Теперь я использую powershell, поэтому любые советы будут оценены.
#Set Variables
# Get current date/time then subtract days to keep files.
$limit = (Get-Date).AddDays(-15)
#Set path of Files to be scanned & deleted
$path = "Directory to Files"
# Delete files older than the $limit.
Get-ChildItem -Path $path -Recurse -Force | Where-Object { !$_.PSIsContainer -and $_.CreationTime -lt $limit } | Remove-Item -Force
#End of Script
решение1
Просто для удобства использования для всех, кто может последовать. Используя приведенные выше ответы, я смог выяснить, как использовать регулярное выражение, чтобы просто просмотреть любой файл с датой в имени файла, которая старше X дней. Последний файл не содержит даты в имени файла, поэтому это сработало для меня. Имейте в виду, что вам придется настроить регулярное выражение в зависимости от синтаксиса даты.
#Set Variables
# Get current date/time then subtract days to keep files.
$limit = (Get-Date).AddDays(-15)
#Set path of Files to be scanned & deleted
$path = "D:\BACKUPS\ConfigChange"
# Delete files older than the $limit and matching the dates in the file name.
Get-ChildItem -Path $path -Recurse -Force | Where-Object { !$_.PSIsContainer -and $_.BaseName -match '(\d{2})-(\d{2})-(\d{2})_(\d{2})-(\d{2})-(\d{2})' -and $_.CreationTime -lt $limit } | Remove-Item -Force
#End of Script