É o grepque está "pendente". Quando grepé executado sem um nome de arquivo para ler, ele lerá a entrada padrão. Se você não fornecer nenhum dado na entrada padrão, parecerá "travar".
Você também está fazendo um loop sobre a saída de find. Isso é deselegante (o loop não será executado até que todos os nomes de caminho tenham sido encontrados por find) e perigoso (os nomes de caminho serão divididos em espaços em branco e o shell executará globbing de nome de arquivo neles).
Em vez disso, se você quiser executar grepem todos os arquivos com um sufixo de nome de arquivo específico:
Eu mudei a -regexcoisa para um -nameteste padrão com um padrão que corresponde apenas a nomes de arquivos com um .mdsufixo de nome de arquivo. Eu também adicionei -type f, pois só faz sentido executar grepem arquivos regulares (você pode querer mudar -type fpara ! -type dexecutá-lo em qualquer diretório que não seja).
O grepé executado -execem lotes nos nomes de caminho encontrados. Estou usando -Fwith grepporque estamos combinando uma string, não uma expressão regular. Você pode adicionar -wse desejar corresponder uma palavra em vez de qualquer substring.
É o
grep
que está "pendente". Quandogrep
é executado sem um nome de arquivo para ler, ele lerá a entrada padrão. Se você não fornecer nenhum dado na entrada padrão, parecerá "travar".Você também está fazendo um loop sobre a saída de
find
. Isso é deselegante (o loop não será executado até que todos os nomes de caminho tenham sido encontrados porfind
) e perigoso (os nomes de caminho serão divididos em espaços em branco e o shell executará globbing de nome de arquivo neles).Em vez disso, se você quiser executar
grep
em todos os arquivos com um sufixo de nome de arquivo específico:Eu mudei a
-regex
coisa para um-name
teste padrão com um padrão que corresponde apenas a nomes de arquivos com um.md
sufixo de nome de arquivo. Eu também adicionei-type f
, pois só faz sentido executargrep
em arquivos regulares (você pode querer mudar-type f
para! -type d
executá-lo em qualquer diretório que não seja).O
grep
é executado-exec
em lotes nos nomes de caminho encontrados. Estou usando-F
withgrep
porque estamos combinando uma string, não uma expressão regular. Você pode adicionar-w
se desejar corresponder uma palavra em vez de qualquer substring.Relacionado:
você precisa passar o nome do arquivo para
grep
tão parecido
você também pode usar
-n
faz com que grep imprima números de linha correspondentes