Как использовать регулярные выражения в файле найти - PullRequest
56 голосов
/ 09 марта 2011

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

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

В этом списке ничего нет.Что с ним не так?

Ответы [ 5 ]

100 голосов
/ 09 марта 2011
find /home/test -regextype posix-extended -regex '^.*test\.log\.[0-9]{4}-[0-9]{2}-[0-9]{2}\.zip' -mtime +3
  1. -name использует глобулярные выражения, ака подстановочные знаки. Что вы хотите -regex
  2. Чтобы использовать интервалы по своему усмотрению, вы нужно указать find использовать Extended Регулярные выражения через -regextype posix-extended флаг
  3. Вы должны сбежать из периодов потому что в регулярном выражении период имеет особое значение любой символ . То, что вы хотите, это буквальный период, обозначаемый \.
  4. Для сопоставления только тех файлов, которые больше , чем 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
14 голосов
/ 09 марта 2011

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

10 голосов
/ 09 марта 2011

Начните с:

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

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

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

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

7 голосов
/ 09 марта 2011

Использование -regex:

Со страницы руководства:

-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'
1 голос
/ 14 октября 2016

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

Найти директорию с именем, подобным книге

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

Найти файл с именем, подобным слову книги

find . -name "*book*" -type f
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...