Como obtenho o grep para excluir caminhos específicos?

0

Nota: esta não é uma duplicata. Estou lidando com uma determinada instância em que as opções do grep para excluir diretórios / caminhos não se comportam de uma maneira esperada.

Estou tentando usar o grep para pesquisar recursivamente o meu sistema de arquivos raiz. Estou tentando excluir determinados diretórios, como /proc , /sys e /usr/local . Se eu usar --exclude-dir=${DIR_NAME} , ele não pesquisará em caminhos abaixo de ${DIR_NAME} , mas isso também significa que se recusará a pesquisar caminhos abaixo de ${DIR_NAME} se ${DIR_NAME} estiver em um nível abaixo do diretório de trabalho atual. Como exemplo, considere esta árvore do sistema de arquivos:

${PWD}/
  data/
    settings/
      sys/
    users/
      developer/
        projects/
          my_os/
            build/
            src/
              apps/
              sys/
            Makefile
  extras/
  sys/
    apps/
    os/

Se eu quiser que minha pesquisa exclua ${PWD}/sys e tudo nela, grep -rl --exclude-dir=sys a excluirá, mas também excluirá ${PWD}/data/settings/sys e ${PWD}/users/developer/projects/my_os/src/sys , dois diretórios que desejo incluir na minha pesquisa.

Eu estava originalmente esperando que --exclude-dir / --exclude permitisse expressões regulares e encontrei este comentário indicando que eles fazem, mas parece que a sintaxe da expressão regular não afeta o comportamento do utilitário (por exemplo, "^/(dev|proc)" ). Eu estou bem se essas duas opções não usam expressões regulares, mas eu não quero que o padrão de exclusão seja aplicado a componentes de caminho singular. Existe alguma maneira de fazê-lo funcionar assim?

    
por Melab 13.04.2017 / 03:07

1 resposta

1

Use simplesmente isto:

grep -r "text" | grep -i -v ^sys/ 

Você pode adicionar muito "| grep -i -v ^ dir /" conforme necessário.

    
por 25.09.2017 / 09:52

Tags