[2-20]+
не является правильным способом проверить, находится ли число в диапазоне от 2
до 20
. Квадратные скобки в регулярном выражении просто соответствуют одному символу, который соответствует любому из символов внутри него. И -
в наборе символов используется для указания диапазона символов (, например. 2-9
илиa-z
); диапазон 2-2
такой же, как просто 2
.Итак, [2-20]+
эквивалентно [20]+
, соответствует любой последовательности символов 2
и 0
, например 2
, 20
, 02
, 2200
и т. д.
Должно быть ([2-9]|1[0-9]|20)
. Это соответствует одной цифре от 2
до 9
, 1
, за которой следует 0
до 9
или 20
.
Если вы используете GNU find
, вы можете использовать оператор -delete
вместо -exec rm {} \;
.
И нет необходимости использовать 2>&1
, если вы не перенаправляете стандартный вывод. По умолчанию как стандартный вывод, так и стандартная ошибка отправляются пользователю по почте.
@weekly find /var/log/ \( -iregex '.*\.([2-9]|1[0-9]|20)' -o -iname "*.gz" \) -delete
Вероятность столкновения md5sum равна 1 из 2 64 . См. этот пост на crypto.se для получения более подробной информации.
SideNote:Содержимое файла хэшируется, имя файла не играет никакой роли в хешировании. Вы уверены, что файлы разные, а не только имена?
$ md5 /tmp/files.txt*
MD5 (/tmp/files.txt) = 29fbedcb8a908b34ebfa7e48394999d2
MD5 (/tmp/files.txt.clone) = 29fbedcb8a908b34ebfa7e48394999d2