linux find regex - posso usar 'search', em vez de match?

0

o utilitário find é poderoso, mas eu preciso de alguns recursos adicionais.

sua -regex search trata cada nome de arquivo (ou dirname) como uma string e aplica applex apenas no começo do nome. como re.match(..) de python. se não produzir uma correspondência, ela não será encontrada.

por exemplo Se eu quiser encontrar arquivos contendo 'log', (eu sei que existem maneiras mais simples de encontrar arquivos cujo nome de arquivo contenha 'log' sem regex, mas é apenas para um exemplo)

$ find -regex 'log'
(nothing)

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

Então, existe uma maneira de fazer find com -regex que usa regex em nomes de arquivos, como grep ou re.search(..) de python - não apenas no início de uma string, mas em qualquer lugar onde ela possa corresponder?

    
por thkang 06.10.2013 / 15:27

1 resposta

0

A regex não é aplicada apenas no início, ela é aplicada à string whole . Você só precisa dar o regex certo, um que capture o nome do arquivo inteiro:

$ 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

Você pode estar procurando o -name test, que usa globs, não expressões regulares:

$ find  . -name "*foo*" 
./aaafoo
./aaafooaaa
./fooaaa
    
por 06.10.2013 / 15:57