Eu vou cutucar o seu próprio loop, e tentar entender o que ele está realmente fazendo, e então ver como você pode conseguir o que você quer.
Como você inicia seu loop é extremamente complexo: ls | while read -r file;
. Você está canalizando os resultados de ls
para seu while read
, não é grande coisa, ainda funciona, embora eu recomende um loop for
mais como:
for file in ./* ;
Isso fará um loop pelos mesmos arquivos, mas será um pouco mais direto. Além disso, o comando ls
pode retornar a saída que não é apenas os nomes de arquivos (já note que ls
tem cores de fonte diferentes para diretórios / executáveis?), E isso pode causar outros lamentos de comandos.
Seu comando: egrep "ERROR|FAIL|WARN" > ../errors-$file
está tentando egrep
para ERROR|FAIL|WARN
em nada e redirecionando a saída para ../errors-$file
.
A sintaxe para egrep
é:
egrep [search pattern] [location]
Então, você está perdendo a localização para egrep
procurar. Você pode corrigir isso adicionando $file
após seu padrão, de modo que se torne:
#!/bin/bash
mkdir result
cd $1
for file in $(find ./ -type f)
do
egrep "ERROR|FAIL|WARN" $file > ../result/errors-$(basename $file)
echo "-------------------------------" >> ../result/errors-$(basename $file)
egrep "denied" -B 1 $file >> ../result/errors-$(basename $file)
done