Costumo usar o seguinte pipeline de locate
(de findutils
) e grep
para localizar arquivos cujos nomes de caminho contenham duas palavras word1
e word2
, sem nenhuma ordem específica entre si:
locate -i word1 | grep -i word2
Eu queria saber como fazer isso com um único comando não-pipeline sozinho? É uma maneira melhor do que meu comando de pipeline?
Suporta algum regex locate
no qual podemos formular meu padrão de pesquisa?
Obrigado.
Solução com find
é https://unix.stackexchange.com/a/448006/674
Isso depende muito da sua implementação do
locate
. Esse não é um comando padrão e existem algumas implementações diferentes com diferenças bastante significativas.Há uma implementação no GNU findutils.
Com aquele:
localiza arquivos cujo caminho contém
word1
ou não faz distinção entreword2
maiúsculas e minúsculas enquantolocaliza arquivos cujo caminho contém ambos.
Ele também suporta uma opção
--regex
e--regextype
como para GNUfind
. Por padrão, isso éemacs
regexps estilo -, alguma forma de híbrido entre BRE e ERE.Com esse, você poderia fazer:
A
mlocate
implementação (o padrão no Debian e derivados) também suporta-A
. Tem-r
/--regex
, mas não--regextype
e seus REs são Expressões Regulares Básicas. Em sistemas como os GNU cujos BREs suportam\|
alternância como uma extensão, você também pode fazer:o ast-open tem um
locate
script wrapper ksh93tw
(o sucessor defind
) . Ele não suporta-A
nem-r
, mas você pode usar todo o poder dosksh93
curingas, então você pode usar, por exemplo, operadores lookahead do tipo perl com:Operador glob
ksh93
de Or :&
É particularmente lento em comparação com os outros, pois o padrão não está ancorado. É melhor uma vez que a ancoragem (
l
esquerda er
direita) é restaurada com:Um problema com o pipeting
grep
é que ele não funciona para o caminho do arquivo que contém caracteres de nova linha. Com GNU localizar ou mlocate, você pode usar a-0
opção para usar registros delimitados por NUL que você pode usar em combinação com a-z
opção de GNUgrep
:Ou
-v RS='\0'
no GNU gawk ou @ThomasDickey'smawk
:Ou
perl -ln0
: