
Estou tentando percorrer arquivos em um diretório que começa com a string indicada na for
instrução. Dentro do loop, quero procurar a string padrão foo
no arquivo. Se a string for encontrada no arquivo que echo
desejo $filename
.
#!/ppp/bash
for filename in $(find ~/filesList -type f -name "pge_*")
do
#If 'foo' located echo $filename
done
Qualquer sugestão será muito bem-vinda.
Responder1
Utilize find
para executar grep
:
find ~/filesList -type f -name 'pge_*' -exec grep -lF -- foo {} +
-l
lista os nomes dos arquivos que contêm uma correspondência para foo
. -F
significa que a expressão foo
deve ser considerada uma string fixa em vez de uma expressão regular.
Responder2
Primeira sugestão - não há necessidade de usar find
no seu for
loop, pois isso torna as coisas mais lentas. Em vez disso, você pode fazer algo como:
for f in ~/filesList/pge_*
Uma advertência bastante importante é que esta versão simplificada não pesquisará subdiretórios ~/filesList
enquanto a find
versão o fará, portanto, dependendo do seu caso de uso real, talvez você não consiga simplificar.
Quanto à pesquisa nesses arquivos, você desejará usar um grep
tipo de construção:
if (grep needle haystack > /dev/null 2>&1)
then
echo $f
fi
Ao grep
encontrar a agulha que procura, ele retorna um valor diferente de zero, portanto a condição é avaliada como TRUE. Eu uso o > /dev/null 2>&1
para evitar ver os resultados do grep
. Se grep
não encontrar a agulha no palheiro, seu código de retorno é 0, portanto a condicional é FALSE, ignorando a then
instrução.