Como você inverte um comando “locate”. Ex. Mostrar tudo, exceto X

1

ao fazer um locate para encontrar um arquivo específico, ele mostra muitas coisas, mas existe uma maneira de inverter o que é mostrado? Ex. localize qualquer coisa que tenha a palavra drupal, mas não mostre nada do diretório inicial.

    
por Patoshi パトシ 25.09.2014 / 22:06

1 resposta

3

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 .

    
por 25.09.2014 / 23:42

Tags