Olá, pessoal! Tudo bem? Recentemente, me deparei com uma situação interessante enquanto estava realizando auditorias em um ambiente Oracle. Precisava localizar logs específicos dentro de diversos arquivos .zip no Linux, onde cada arquivo zipado continha logs de auditoria. A tarefa envolvia procurar por uma string específica dentro desses arquivos.
Para facilitar o processo, utilizei um script shell que percorre todos os arquivos .zip em um diretório e procura pela string desejada dentro dos aquivos zipados.
O Problema
A string que eu precisava localizar nos logs era “create view PHONE”. Dentro desses logs estão todos os comandos emitidos a partir do servidor oracle via SQLPLUS com usuários SYSDBA, como por exemplo:
create view vw_phone
CREATE VIEW vw_PHONE
É interessante observar que há diferenças de espaçamento e de sensibilidade a maiúsculas e minúsculas (case sensitive e case insensitive)
Solução
Para resolver esse problema, criei um script shell que percorre todos os arquivos .zip em um diretório e procura pela string “create” “view” “phone”. Abaixo está o script que utilizei:
#!/bin/bash
# Verifica se pelo menos um argumento foi passado
if [ "$#" -lt 1 ]; then
echo "Uso: $0 <palavra1> [palavra2] [palavra3]"
exit 1
fi
# Atribui os parâmetros às variáveis, se fornecidos
word1=$1
word2=$2
word3=$3
# Constrói o padrão de busca
pattern="$word1"
if [ -n "$word2" ]; then
pattern="$pattern\s+.*$word2"
fi
if [ -n "$word3" ]; then
pattern="$pattern\s+.*$word3"
fi
# Diretório onde estão os arquivos .zip
dir="/auditoria/var/log"
# Loop para processar cada arquivo .zip no diretório
for zip_file in "$dir"/*.zip; do
echo "Procurando em $zip_file..."
# Descompacta o conteúdo do arquivo zip e procura o padrão construído
unzip -p "$zip_file" | grep -iP "$pattern"
done
Este script é projetado para realizar uma busca em arquivos compactados .zip
, localizados em um diretório específico, por palavras ou frases fornecidas pelo usuário como parâmetros. Ele exige que pelo menos uma palavra seja fornecida, mas permite até três palavras como parâmetros.
O script começa verificando se pelo menos um parâmetro foi passado. Se não houver nenhum parâmetro, ele exibe uma mensagem de uso e encerra a execução. Em seguida, ele atribui os parâmetros fornecidos a variáveis específicas, que serão usadas para construir o padrão de busca.
O padrão de busca é construído dinamicamente com base nos parâmetros fornecidos. O primeiro parâmetro é obrigatório, e os segundo e terceiro parâmetros, se fornecidos, são adicionados ao padrão, permitindo a existência de espaços ou outros caracteres entre as palavras.
Depois, o script define o diretório onde estão localizados os arquivos .zip
que serão processados. Ele então itera sobre cada arquivo .zip
nesse diretório, descompacta o conteúdo diretamente na saída padrão e utiliza o comando grep
para buscar o padrão construído no conteúdo descompactado.
Por fim, o script exibe os resultados da busca, indicando em qual arquivo foi encontrada a correspondência com o padrão especificado. Se vários arquivos forem processados, ele repete esse processo para cada um, buscando o padrão em todos os arquivos .zip
no diretório especificado.
Exemplos de Uso

Auditar logs zipados pode ser uma tarefa cheia de passos, especialmente quando lidamos com muitos arquivos comprimidos. Este script shell fornece uma maneira simples e eficaz de procurar strings especificas dentro de arquivos .zip. 👋🚀🚀🚀
#GuinaNãoTinhaDó #SeReagirBúmViraPó #CaceteDeAgulha #ClienteSemNoção #AjudaODBA #DBAHerói #FitaLoka #MetaTomarSeuLugar #QueFita #TicTac09:40 #VidaBandida #OMetrôVaiPassar #1000Fita #ZePovinho #Dimas #1000Faces #9M #GuinaTaEmCana #SemMiséria #DiheiroNaMão #SuguroVaiCobrir