Sim, eu faço o que @Raza sugere o tempo todo. Por exemplo, digamos que eu queira encontrar todos os arquivos relacionados a fontes não localizados em ~/installations/
esperando para serem instalados.
locate font | grep -v installations
Opa, esqueci que isso corresponderá a muitas coisas em $HOME/.cache
e $HOME/.config
.
locate font | grep -v $HOME
Agora, livre-se de páginas de manual, coisas locais, ícones ...
locate font | grep -v -e $HOME -e icons -e /man/ -e /locale/
Provavelmente não está interessado em /var/cache
...
locate font | grep -v -e $HOME -e icons -e /man/ -e /locale/ -e /var/cache
etc.
Outro caso de uso que eu tenho frequentemente é pesquisar todas as versões de um programa no meu sistema. locate emacs
gerará milhares de resultados, então eu filtro apenas para resultados em que 'emacs' está no basename:
locate emacs | egrep 'emacs[^/]+$'
D'oh, isso ainda mostra ícones e páginas de manual e outras coisas. Então, como sobre onde o basename não tem período após o emacs ...
locate emacs | egrep 'emacs[^/.]+$'
Isso é muito melhor.
Lembre-se, ao contrário de find
, locate
é uma pesquisa de banco de dados; ele não consome recursos do sistema de arquivos para procurar resultados, portanto, você não sacrifica nada gerando muitos resultados e, em seguida, filtrando-os com grep
.