Удалить журналы, которые закончились в формате даты - PullRequest
0 голосов
/ 14 января 2020

Я создал следующий cli, чтобы удалить журналы с форматом даты, который старше, чем 500 минут

формат даты:

 data-node.log.xxxx-xx-xx-[1-10]

cli, который должен удалить журналы

find /var/log/test/  -type f -mmin +500 -regextype sed -regex '.*\.log\.[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}-[0-9]\{2,10\}$' -delete

как мы видим журналы еще существуют

ls -l /var/log/test/



-rw-r--r-- 1 root root 0 10:02 data-node.log.2019-12-14
-rw-r--r-- 1 root root 0 10:02 data-node.log.2019-12-15
-rw-r--r-- 1 root root 0 10:02 data-node.log.2019-06-16
-rw-r--r-- 1 root root 0 10:02 data-node.log.2020-01-17
-rw-r--r-- 1 root root 0 10:05 data-node.log.2020-01-1723
-rw-r--r-- 1 root root 0 10:05 data-node.log.2020-01-172334
-rw-r--r-- 1 root root 0 10:05 data-node.log.2020-01-17233434
-rw-r--r-- 1 root root 0 10:05 data-node.log.2020-01-1723343434

где я не прав?

Ответы [ 2 ]

1 голос
/ 14 января 2020

Ваше регулярное выражение не соответствует файлам. Измените

'.*\.log\.[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}-[0-9]\{2,10\}$'

на

'.*\.log\.[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2,10\}$'

, поскольку нет третьего дефиса (ни четвертого поля даты).

0 голосов
/ 14 января 2020

При составлении регулярного выражения вы допустили две логические ошибки:

1. '. *. log. [0-9] {4} - [0-9] {2} - [0-9] {2} - [0-9] {2,10} $ Этот минус не будет существовать.

2. '. *. log. [0-9] {4} - [0-9] {2} - [0-9] {2} - [0-9] {2,10} $ Этот квантор неверен. Имена файлов могут, но не обязательно содержать от 2 до 10 дополнительных чисел. Следовательно, конечная строка $ тоже неверна.

Это будет работать:

find /var/log/test/ -type f -mmin +500 -regextype sed -regex '.*\.log\.[0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}[0-9]*' -exec rm {} +

Exe c + будет составлять команду с максимально возможным количеством имен файлов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...