Я не знаю, есть ли более поздние версии, но после дальнейших исследований я обнаружил, что подстановочные знаки оболочки поддерживаются. Оба *
(соответствуют нескольким символам) и ?
(соответствует одному символу) можно комбинировать для соответствия конкретным файлам.
В качестве примера, здесь приведены шаблоны, которые соответствуют вашему варианту использования вместе с остальной частью файла, который можно найти в /etc/logrotate.d/process
/path/to/my/logfiles/process.????.????????.log
/path/to/my/logfiles/process.????.log
{
# Look for previously matched log files and rotate daily if found
daily
# use date as a suffix of the rotated file
dateext
# Compress log file, optional if the files are small enough
compress
# Allow for a log file pattern to NOT match in order to support both
# filename formats
missingok
# Do not create replacement log files, the application will do that
nocreate
# Keep 30 days worth of rotated logs
maxage 30
}
Однако, если вы намеревались, чтобы process
был заполнителем для фактического идентификатора процесса, то я считаю, что вы можете избежать использования подстановочного знака вместо идентификатора процесса, например так:
/path/to/my/logfiles/*.????.????????.log
/path/to/my/logfiles/*.????.log
{
...
}
Надеюсь, это поможет. Я тоже отправился на поиски подходов регулярных выражений, которые бы сработали, и в итоге решил использовать подстановочные знаки оболочки вместо того, что, по моему мнению, было работоспособным, но более сложным решением.
Пример:
При поиске решения для регулярных выражений я обнаружил запись в блоге под названием « Исключение файлов из совпадений глобализации logrotate », которая предоставила это решение:
/var/log/upstart/*.log {
daily
missingok
rotate 7
compress
notifempty
nocreate
nosharedscripts
prerotate
bash -c "[[ ! $1 =~ testprogram ]]"
endscript
}
В итоге я вытащил две вещи из этого примера и немного изменил матч. В моей ситуации я хотел повернуть все файлы в каталоге, за исключением некоторых входных файлов с расширением .inp
.
Вот что я придумал:
# Force the prerotate "script" below to be run on each individual file
# in order to verify that it isn't an unprocessed input file
nosharedscripts
# Skip rotating any unprocessed input files (*.inp extension)
prerotate
bash -c "[[ ! $1 =~ \.inp$ ]]"
endscript
Согласно logrotate -d /etc/logrotate.d/myfilename
это работает. Однако, как я уже упоминал, я выбрал подход с использованием подстановочных знаков оболочки, так как кому-то, идущему за мной, было проще поддерживать.