Estou tentando pesquisar recursivamente uma string com grep
, mas recebo isso:
$ grep -r "stuff" *
grep: unrecognized option '---corporate-discount.csv'
Usage: grep [OPTION]... PATTERN [FILE]...
Try 'grep --help' for more information.
Como posso impedir que o Bash passe arquivos começando -
como argumento?
Primeiro, observe que a interpretação de argumentos que começam com hífens depende do programa que está sendo iniciado
grep
ou outro. O shell não tem uma maneira direta de controlá-lo.Supondo que você queira processar esses arquivos (e não ignorá-los completamente),
grep
, junto com a maioria dos programas, reconhece--
como indicando o fim das opções, portantovai fazer o que você quer. O
-e
está lá no caso destuff
começar com um-
também.Alternativamente, você também pode usar:
Este último também evitaria o problema se houvesse um arquivo chamado
-
no diretório atual. Mesmo após o--
separador,grep
interpreta-
como significando stdin, enquanto./-
é o arquivo chamado-
no diretório atual.Para evitar que a expansão do Bash passe arquivos começando com “-” , você pode usar:
Que funciona de forma portátil na maioria dos shells, ou, específico para ksh, bash, zsh:
Por exemplo: em um diretório com esses arquivos
Listará apenas (desde que
extglob
esteja ativo):Mas se o que você deseja é processar todos os arquivos enquanto diz ao grep para evitar interpretar arquivos declarados com
-
as opções, basta adicionar um./
:Ou, se houver garantia de que nenhum arquivo chamado
-
existe exatamente nos arquivos listados (grep interpretará um solitário-
como lido de stdin ), você pode usar: