мы хотим удалить все файлы, которые заканчиваются на число с цифрой или более, например, 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
являетсяправильный синтаксис с небольшими оговорками:
-delete
непереносимо. В общем, реализацииfind
могут поддерживать или не поддерживать его. Переносимым эквивалентом является-exec rm {} \;
.-name
использует глобальные шаблоны. В зависимости от вашей локали,[0-9]
можетили нетозначает именно то, что вы хотите: он может соответствовать символу из набора, отличного от просто десятичных цифр ASCII (например, он может соответствовать