Estou tentando usar o comando localizar para encontrar arquivos na minha pasta pessoal, no entanto, sempre que tento executar isso, não recebo resultados:
locate -i -l 4 --regexp '^\/home\/jack\/[A-Za-z0-9\/\ ]*(My.)*$'
Eu também tentei, ^\/home\/jack\/^(?!\.)[A-Za-z0-9\/\ ]*(My.)*$
mas isso não retorna resultados também.
O arquivo que estou procurando apenas para testá-lo é /home/jack/Music/Foals/My Number.flac
Gostaria de excluir os resultados de arquivos ocultos da minha pesquisa.
bash
regular-expression
locate
Jack Jones
fonte
fonte
locate
. Faz sentido combinar-b
(ou seja, "Corresponder apenas o nome da base aos padrões especificados".) Com um caminho--regexp
? Por que você escapa dos/
?(My.)*
deveria fazer?My.*$
trabalho. Você tem que escapar()
nas ERs básicas.--regexp
leva um regex básico. Tente mudar--regexp
para--regex
(nãop
). A página de manual diz que--regex
faz correspondência estendida de regex.Respostas:
Isso parece fazer o trabalho.
Citações do manual:
fonte
Como a localização funciona
O índice de arquivos que o
locate
comando usa é reconstruído apenas uma vez por dia, normalmente. É construído por este trabalho cron/etc/cron.daily/mlocate
,. Portanto, suas entradas provavelmente ainda não estão lá. Você pode executá-lo novamente se quiser reconstruir manualmente esses índices.Usando find
No entanto, provavelmente você está melhor usando um comando como
find
para localizar arquivos no diretório inicial.Usando uma GUI
Você também pode estar interessado em uma ferramenta de pesquisa gráfica. Dê uma olhada nessas outras perguntas e respostas da U&L intituladas: GTK Frontend for Locate, que abrange uma dessas ferramentas chamada Catfish. Essa ferramenta também pode utilizar
locate
dados efind
comandos.fonte
locate
mais rápido do quefind
mesmo se eu tiver que fazer oupdatedb
primeiro. Enquanto o banco de dados já estiver razoavelmente atualizado, a maioria dos sistemasupdatedb
não levará muito tempo. Encontrar sintaxe é provavelmente mais fácil neste caso.find
.Você também pode adotar uma abordagem diferente:
Não tenho certeza do que você está tentando fazer. Você está usando a
-i
bandeira para torná-lo caso insensível e seu regex não é muito específico, você parece superior quer encontrar todos os arquivos ou pastas que estão sob/home/jack
e que contêmMY
,My
,my
, oumY
em qualquer lugar do nome do arquivo. Se sim, basta executarfonte
Isso deve funcionar - corresponde apenas a arquivos e pastas não ocultos:
ainda mais simples - corresponde a arquivos que não possuem diretórios ocultos em nenhum lugar da árvore de diretórios. Provavelmente é isso que você deseja:
fonte
locate
, pois estou tentando integrá-lo a uma GUI do Python para pesquisar enquanto você digita e é mais rápido. Mas obrigada mesmo assim!locate
acelerar os resultados. Exemplo:echo /home/jack/**/*My.*