Утилита find очень мощная, но мне понадобятся некоторые дополнительные функции.

его поиск -regex обрабатывает каждое имя файла (или имя_директора) как строку и применяет данное регулярное выражение только в начале имени. как re.match(..) питона (..) . если это не приведет к совпадению, оно не будет найдено.

например, если я хочу найти файлы, содержащие 'log' (я знаю, что есть более простые способы найти файлы, чье имя файла содержит 'log' без регулярных выражений, но это только для примера)

$ find -regex 'log'
(nothing)

$ find -regex '\./.*log.*$'
./log9
./log7
./log5
./log0
./log2
./log4
./log6
./log8
./log3
./log1

Итак, есть ли способ find с помощью -regex который использует regex для имен файлов, например, grep или python re.search(..) - не только в начале строки, но и в любом месте, где он может совпадать?

1 ответ1

0

Регулярное выражение применяется не только к началу, оно применяется ко всей строке. Вам просто нужно дать правильное регулярное выражение, которое захватывает полное имя файла:

$ ls -l
total 0
-rw-r--r-- 1 terdon terdon 0 Oct  6 15:46 aaafoo
-rw-r--r-- 1 terdon terdon 0 Oct  6 15:46 aaafooaaa
-rw-r--r-- 1 terdon terdon 0 Oct  6 15:46 fooaaa
$ find . -regex ".*foo.*"  
./aaafoo
./aaafooaaa
./fooaaa
$ find . -regex "^./foo.*"  
./fooaaa
$ find . -regex ".*foo"
./aaafoo

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

$ find  . -name "*foo*" 
./aaafoo
./aaafooaaa
./fooaaa

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .