LINUX.ORG.RU

find '*[0-9]{3}*'

 


0

1

извините,, но не могу найти как find использовать рег выражения.. типа

ls |grep -E ‘[0-9]{3,}

но find ./ -name ‘[0-9]{3,}’ -ненаходит но и не ругается

как правильно синтаксис в find?


Нет. У тебя скорее всего GNU grep, и по умолчанию там очень много расширений; в find -name и -iname не используют регекспы вообще, там только глобы.

find ./ -name ‘[0-9]{3,}’

Правильно, он ищет файл с именем (не начинающийся с, не заканчивающийся на, а конкретно такой набор символов в имени, последовательно) [0-9]{3,}, не находит, и ничего не выводит.

mord0d ★★★★★
()
Ответ на: комментарий от mord0d

ну это я в принципе написал, а на самом деле так

ls ./ | grep -E ‘*[0-9]{3,}.[0-9]{8}’

temp.123.12345678.txt -нашел

find ./ -name ‘*[0-9]{3,}.[0-9]{8}’ - ничего

а вот так

find ./ -name ‘**[0-9]*’ -работает, только незнаю как {3,} добавить , синтаксис наверно неправильно

flat
() автор топика
Последнее исправление: flat (всего исправлений: 5)
Ответ на: комментарий от flat

только незнаю как {3,} добавить

Ты читал мануал по find(1)? Видел там про -E, -regex и -iregex? У меня не Linux, но как минимум последние две опции у find быть должны, но первая может называться иначе.

синтаксис наверно неправильно

Не надо гадать, надо читать документацию. Я не могу дать тебе быстрый правильный ответ потому что у меня другой find.

Вот так у меня работает:

find . -regex '.*[0-9]\{2\}'

Обрати внимание, не * (глоб), а .* (RE, любое количество любых символов). И экранирование curly braces, иначе оно ищет их как часть имени.

И ещё раз: -name/-iname регулярок не понимает, для регулярок используется другой ключ.

mord0d ★★★★★
()
Ответ на: комментарий от flat

да и не ругается на {3}

Потому что он ищет файлы, имена которых содержат {3} как есть.

mord0d ★★★★★
()

тебя что в гугле забанили, первая ссылка на SO

anonymous
()
Ответ на: комментарий от flat

но ненаходит

Ты вообще читаешь что я пишу? ☺

Это пример с другим find, не таким как в Linux. Я тебе дал только направление (использование -regex/-iregex вместо -name/-iname для начала), дальше тебе придётся почитать руководство и разобраться самому.

mord0d ★★★★★
()
Ответ на: комментарий от flat

find ./ |grep -E ‘*[0-9]{3,}.[0-9]{8}’

видать больше ниче не придумаеш, наверно не умеет find сам без грепа

ну ладно всем спасибо извините

flat
() автор топика
Ответ на: комментарий от flat

найти логи по маске «сервис.чтото.дата»

Для этого у find есть -[acm]time. Если бы ты читал руководство, ты бы это знал и не плясал с единственным -name вокруг всего. Если этого не достаточно, у ls есть флаг -t.

А опираться на имена (тем более logrotate и newsyslog не именуют логи по датам) ненадёжно: лог может быть создан год назад, а писать в него могут до сих пор.

Ну и в Linux сейчас повсеместно systemd, в котором (точнее в journald) логи хоть и пишутся в кучу, но выборку можно сделать в том числе по дате/времени.

mord0d ★★★★★
()

Аноним в первом сообщении намекнул (коротко, но всё же):

find . -regextype posix-extended -regex '.*[0-9]{3,}'
xaizek ★★★★★
()
Ответ на: комментарий от flat

А самому найти было никак? Давай уж и зарплату за тебя ЛОРовцы будут получать, раз они за тебя задачки решают.

mord0d ★★★★★
()
Ответ на: комментарий от anonymous

Как всегда на ЛОРе, правильный ответ дан в первом же комментарии, но это не мешает очередному ТС устроить тред тупняка.

legolegs ★★★★★
()
Последнее исправление: legolegs (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.