Regex для цифр в Unix команда поиска - PullRequest
8 голосов
/ 11 января 2011

У меня есть эта команда:

find reports/ -type f -mtime +90 -regex ".*\.\(csv\|sql\|txt\|xls\|zip\)"

И мне нужно увеличить ее, чтобы часть перед расширениями файлов соответствовала шаблону YYYY/MM/DD, например:

reports/2010/10/10/23.txt
reports/2010/10/10/23.xls
reports/2010/10/10/26.csv
reports/2010/10/10/26.sql
reports/2010/10/10/26.txt
reports/2010/10/10/26.xls
reports/2010/10/10/27.csv

Но мне не удается получить какую-либо перестановку \d, и парни сбегают на работу.

ОБНОВЛЕНИЕ : вот что сработало для меня на основе принятого ответа ниже:

find reports/ -type f -mtime +90 -regex "reports/201[01]/\([1-9]\|1[012]\)/\([1-9]\|[12][0-9]\|3[01]\)/.*\.\(csv\|sql\|txt\|xls\|zip\)"

Ответы [ 4 ]

6 голосов
/ 11 января 2011

Это то, что я использовал в прошлом:

Year: (19|20)[0-9][0-9]
Month:  0[1-9]|1[012]
Day: (0[1-9]|[12][0-9]|3[01])

Вы можете сложить их вместе в своем регулярном выражении.Конечно же, вам придется убежать от скобок и труб.

4 голосов
/ 11 января 2011

\d - расширение регулярных выражений, которое не поддерживается регулярными выражениями Emacs и регулярными выражениями POSIX (это разновидности, поддерживаемые find)Вместо этого вы можете использовать [[:digit:]] или [0-9].

3 голосов
/ 11 января 2011

Следующее выглядит ужасно и не отсеивает недействительные даты, но может быть достаточно близко:

0 голосов
/ 16 июля 2014

Вы можете использовать ретрансляторы следующим образом:

find ./ -regextype posix-egrep -iregex ".*\._[0-9]{8}-[0-9]{6}.*"

Я использую это, чтобы найти резервные копии в форме:

./foo._20140716-121745.OLD

Где foo - это оригинальное имя и цифрыдата и время.

(в CentOS 6.5)

PS -regextype posix-extended тоже работает.

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