Как использовать регулярное выражение в поиске файла

Я пытался найти все файлы датированные и все файлы 3 дня и более назад.

find /home/test -name 'test.log.\d{4}-d{2}-d{2}.zip' -mtime 3

Он ничего не перечисляет. Что с ним не так?

Ответ 1

find /home/test -regextype posix-extended -regex '^.*test\.log\.[0-9]{4}-[0-9]{2}-[0-9]{2}\.zip' -mtime +3
  • -name использует глобулярные выражения, а также подстановочные знаки. Что вы хотите -regex
  • Чтобы использовать интервалы, как вы планируете, вы нужно указать find использовать Extended Регулярные выражения через -regextype posix-extended флаг
  • Вам нужно избегать периодов потому что в регулярном выражении период имеет особый смысл любого персонаж. Вы хотите, чтобы буквальный период, обозначаемый \.
  • Чтобы соответствовать только тем файлам, которые более 3-х дней, вам необходимо указать номер с помощью + как в -mtime +3.

Доказательство концепции

$ find . -regextype posix-extended -regex '^.*test\.log\.[0-9]{4}-[0-9]{2}-[0-9]{2}\.zip'
./test.log.1234-12-12.zip

Ответ 2

Использовать -regex not -name и помнить, что регулярное выражение совпадает с тем, что find будет печатать, например. "/home/test/test.log" не "test.log"

Ответ 3

Начните с:

find . -name '*.log.*.zip' -a -mtime +1

Вам может не понадобиться регулярное выражение, попробуйте:

 find . -name '*.log.*-*-*.zip' -a -mtime +1

Вам понадобится +1, чтобы соответствовать 1, 2, 3...

Ответ 4

Используйте -regex:

На странице man:

-regex pattern
       File name matches regular expression pattern.  This is a match on the whole path, not a search.  For example, to match a file named './fubar3',  you  can  use  the
       regular expression '.*bar.' or '.*b.*3', but not 'b.*r3'.

Кроме того, я не верю, что find поддерживает расширения регулярных выражений, такие как \d. Вам нужно использовать [0-9].

find . -regex '.*test\.log\.[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]\.zip'

Ответ 5

Просто небольшая разработка регулярного выражения для поиска в каталоге и файле

Найдите прямую ссылку с именем, как книга

find . -name "*book*" -type d

Найти файл с именем, таким как книжное слово

find . -name "*book*" -type f