Se eu entrar /etc/apache2/
e digitar grep -rl 'LoadModule php' ./*
, só verei ./mods-available/php7.0.load
. Se eu mudar r
para R
então verei
./mods-available/php7.0.load
./mods-enabled/php7.0.load
Ambos são diretórios simples. Eu esperaria -r
fazer com que o grep recorresse a todos os arquivos/diretórios no PWD. O que está acontecendo -r
? Estou pensando em usar sempre -R
neste momento.
Responder1
De acordo compágina de manual do grep:
-r, --recursivo
Leia todos os arquivos em cada diretório, recursivamente, seguindo links simbólicos somente se eles estiverem na linha de comando. Observe que se nenhum operando de arquivo for fornecido, o grep pesquisa o diretório de trabalho. Isso é equivalente à opção -d recurse.-R, --dereferência-recursiva
Leia todos os arquivos em cada diretório, recursivamente. Siga todos os links simbólicos, ao contrário de -r.
Exemplo:
Eu tenho uma pastatesteem que há um arquivo1.txt.2.txté um link simbólico para1.txttal que a saída de ls -l test
se pareça com:
-rw-r--r-- 1 kulfy kulfy 15 Jun 12 21:53 1.txt
lrwxrwxrwx 1 kulfy kulfy 5 Jun 12 21:53 2.txt -> 1.txt
O conteúdo de1.txté:
This is a file.
Se eu quiser pesquisar"arquivo"string em arquivos dentrotestepasta e eu corro:
grep "file" test
Encontrarei um erro:
grep: test: Is a directory
Mas se eu fizer:
grep -R "file" test
Eu recebo uma saída:
test/2.txt:This is a file
test/1.txt:This is a file
Por outro lado, se eu executar:
grep -r "file" test
Eu recebo a saída:
test/1.txt:This is a file
Aqui, não mencionei explicitamente a verificação de todos os arquivos. Então, quando usei R
flag, link simbólico (aqui2.txt) foi respeitado e o resultado foi gerado. Mas quando usei r
o sinalizador, o link simbólico foi ignorado simplesmente porque não mencionei a verificação2.txttambém.
Responder2
Do GNU grepv2.11-8 e superior,se invocado com-r
exclui links simbólicosnão especificado na linha de comando e os inclui quando invocados com -R
(fonte).
Depágina de manual ( man grep
):
-r
,--recursive
Leia todos os arquivos em cada diretório, recursivamente, seguindo links simbólicos apenas se eles estiverem na linha de comando. Observe que se nenhum operando de arquivo for fornecido, o grep pesquisa o diretório de trabalho. Isso é equivalente à opção -d recurse.
-R
,--dereference-recursive
Leia todos os arquivos em cada diretório, recursivamente. Siga todos os links simbólicos,diferente-r
.