Essa resposta é mais adequada para um comentário, mas seria muito longa, então estou postando como resposta.
O comportamento do grep despertou meu interesse e acho que o OP está no caminho certo, e também descobri que as versões mais recentes do grep se comportam de maneira diferente das versões mais antigas. Nas versões mais antigas, se você não passasse um parâmetro ao usar-r
, ele só procuraria um padrão na entrada padrão, como deveria de acordo com a documentação: grep searches the named input FILEs (or standard input if no files are named, or if a single hyphen-minus (-) is given as file name) for lines containing a match to the given pattern
. Em versões mais recentes, no entanto, ele está procurando por um padrão no diretório atual, mesmo se você não forneceu nenhum nome de arquivo. Verifique isso:
$ mkdir /tmp/grep-test
$ cd /tmp/grep-test
$ echo pam > FILE
$ grep --version
grep (GNU grep) 2.10
(...)
$ grep pam -r
pam
pam
$ /home/ja/grep/grep-2.16/src/grep pam -r
FILE:pam
Não encontrei menção alguma sobre quaisquer alterações relacionadas a isso no grep changelog além de isso :
** Changes in behavior
The -r (--recursive) option now follows only command-line symlinks. Also, by default -r now reads a device only if it is named on the command line; this can be overridden with --devices. -R acts as before, so use -R if you prefer the old behavior of following all symlinks and defaulting to reading all devices.
Ainda é uma questão de questionamento porque o OP quer pesquisar a saída padrão recursivamente, mas definitivamente algo mudou no grep.