Mac OS X find / grep gerando “desconhecido - opção de dispositivos”

5

Estou digitando um comando que fiz frequentemente com o Linux, o Unix perfeitamente bem, mas com o Apple Mac OS X 10.8 (e provavelmente antes) recebo um grep: unknown --devices option quando tento executar o seguinte comando:

find . -type f -name '*.sql' 2>/dev/null | xargs grep -i 'texttolookfor'

Eu verifiquei os resultados do comando find e todos parecem ser apenas arquivos .sql padrão. E devo acrescentar que o problema ocorre com outras pesquisas de arquivos, não apenas .sql files. Ao pesquisar no site da Apple e no Google, não consigo encontrar nenhuma indicação do que está acontecendo aqui.

Alguém tem alguma sugestão?

    
por sldahlin 10.01.2014 / 18:50

3 respostas

4

Parece que você atingiu um arquivo com um nome engraçado, e o xargs o está tratando como dois arquivos. A melhor abordagem é refazer sua descoberta para lidar com todos os nomes com segurança:

find . -type f -name '*.sql' -exec grep -i 'texttolookfor' '{}' +

Isso usa a sintaxe de localizar --exec COMMAND + em vez de xargs . Você também pode usar -print0 / xargs -0 (se isso funciona no OS X, não tenho certeza), mas não há realmente um motivo para isso, a menos que você precise de outros recursos xargs.

Finalmente, se o OS X grep o suportar, você pode usar -- para indicar o final das opções - antes do '{}' , acima - embora isso não devesse ser necessário com o find (já que os arquivos encontrados sempre começam com ./ )

    
por 10.01.2014 / 19:10
1

Parece que você tem a variável de ambiente GREP_OPTIONS set. Você pode confirmar com este comando:

$ env | grep GREP_OPTIONS

Se estiver definido, você pode simplesmente desmarcá-lo.

$ unset GREP_OPTIONS

Não sei por que isso é feito no OSX e pode haver uma maneira melhor de desativá-lo permanentemente se estiver ficando irritante, mas você pode simplesmente adicionar uma linha ao arquivo $HOME/.bashrc , o que deve funcionar, supondo que não é definido por outra coisa depois desse arquivo.

unset GREP_OPTIONS
    
por 10.01.2014 / 19:45
0

Tenha em mente que os Macs são derivados do BSD, não derivados do Linux, então muitas das ferramentas que você tem no terminal são o BSD, e não o GNU, sabores do utilitário. As versões BSD e GNU das coisas são amplamente intercambiáveis, mas existem muitas diferenças que são sutis e rápidas de irritar. Muitas dessas sutilezas surgem nas ferramentas de processamento de texto, como sed e grep ; Mesmo tar tem alguns problemas que você precisa ter em mente.

Eu gostaria de sugerir a instalação de MacPorts e usá-lo para obter as versões GNU dos utilitários se você quiser que seus scripts sejam compatíveis com um Mac.

    
por 10.01.2014 / 19:22

Tags