как удалить все файлы, которые старше X дней и заканчиваются на цифру/ы

как удалить все файлы, которые старше X дней и заканчиваются на цифру/ы

мы хотим удалить все файлы, которые заканчиваются на число с цифрой или более, например, 2-значное или 3-значное и т. д.

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

пример

-rw-r--r--  1 kafka hadoop    73668 Aug  5 07:56 controller.log.2018-08-05-07
-rw-r--r--  1 kafka hadoop    73668 Aug  5 08:56 controller.log.2018-08-05-08
-rw-r--r--  1 kafka hadoop   658893 Aug  7 11:53 controller.log.3
-rw-r--r--  1 kafka hadoop     1092 Aug  7 14:35 controller.log.2
-rw-r--r--  1 kafka hadoop  2750003 Aug  7 14:52 state-change.log.2018-08-07-14
-rw-r--r--  1 kafka hadoop     3678 Aug  7 14:52 log-cleaner.log.2018-08-07-14
-rw-r--r--  1 kafka hadoop   199094 Aug  7 14:52 controller.log.2018-08-07-14
-rw-r--r--. 1 kafka hadoop    24431 Aug  7 15:07 kafka.err
-rw-r--r--  1 kafka hadoop     1147 Aug  7 16:02 server.log.10
-rw-r--r--  1 kafka hadoop     1061 Aug  7 16:02 server.log.9
-rw-r--r--  1 kafka hadoop   135465 Aug  7 16:07 server.log.8
-rw-r--r--  1 kafka hadoop    10278 Aug  7 16:07 server.log.7
-rw-r--r--  1 kafka hadoop    10350 Aug  7 16:07 server.log.6
-rw-r--r--  1 kafka hadoop    10353 Aug  7 16:07 server.log.5
-rw-r--r--  1 kafka hadoop    10322 Aug  7 16:07 server.log.4
-rw-r--r--  1 kafka hadoop     1272 Aug  7 16:07 log-cleaner.log
-rw-r--r--  1 kafka hadoop   473322 Aug  7 16:07 controller.log.1
-rw-r--r--  1 kafka hadoop      170 Aug  7 16:07 controller.log

Ожидаемые результаты:

-rw-r--r--. 1 kafka hadoop    24431 Aug  7 15:07 kafka.err
-rw-r--r--  1 kafka hadoop     1272 Aug  7 16:07 log-cleaner.log
-rw-r--r--  1 kafka hadoop      170 Aug  7 16:07 controller.log

Я пробую этот вариант, но он не работает.

 find . -type f  -mtime +6   -name '*[0-9]'  -print -delete

пожалуйста, помогите мне построить правильный синтаксис,

решение1

Вам необходимо использовать -regexпараметр для find.

find . -type f  -mtime +6 -regex '^.*[0-9]$' -print -delete

Это позволит найти и удалить все файлы, заканчивающиеся на цифры (будьте осторожны, некоторые расширения также могут заканчиваться на цифры, например .mp4).

Также обратите внимание, что -mtimeне поддерживает числа с плавающей точкой и всегда округляет до следующего дня. Так что если вы хотите удалить файлы, которые были изменены не менее шести дней назад, вы предоставляете -mtime +5.

решение2

Пожалуйста, помогите мне построить правильный синтаксис.

Что вы использовали:

find . -type f  -mtime +6   -name '*[0-9]'  -print -delete

являетсяправильный синтаксис с небольшими оговорками:

  1. -deleteнепереносимо. В общем, реализации findмогут поддерживать или не поддерживать его. Переносимым эквивалентом является-exec rm {} \;.

  2. -nameиспользует глобальные шаблоны. В зависимости от вашей локали, [0-9]можетили нетозначает именно то, что вы хотите: он может соответствовать символу из набора, отличного от просто десятичных цифр ASCII (например, он может соответствовать

Связанный контент