tendo problemas de variáveis greping no linux

0

Abaixo está o código que estou tentando:

{    
echo "Enter dirname and hit Return"
read input1
echo "Enter a pattern to be searched for in the current directory"
read input2
find /*/${input1}/*/logs/*/*/*/* -name '*.gz' -exec sh -c 'gzip -cd "$0" | grep -- "${input2}"' {} \;
}

enquanto o input1 combina, mas o input2 não parece combinar e eu estou obtendo todas as saídas do input1 sem obter input2 correspondente.

o objetivo é ler todos os arquivos .gz e obter a correspondência da palavra-chave input2.

    
por learner 25.10.2017 / 15:52

1 resposta

0

O script "interno" que find chama não tem acesso à variável $input2 .

Você pode fazer

find /*/"$input1"/*/logs/*/*/*/* -name '*.gz' \
    -exec sh -c 'gzip -cd "$1" | grep -e "$0"' "$input2" {} \;

Isso transmite o valor de $input2 para o script interno e o disponibilizará como $0 , enquanto o argumento do nome do arquivo será $1 .

Como alternativa, apenas deixe find descompactar os arquivos e filtrar a saída de find como um todo:

find /*/"$input1"/*/logs/*/*/*/* -name '*.gz' \
    -exec gzip -cd {} + | grep -e "$input2"

Como find já entra em todos os subdiretórios do diretório principal, provavelmente você pode deixar de fora alguns dos globs de nome de arquivo e usar -mindepth 4 (se o seu find suportar essa opção) e adicionar -type f para sinalizar que você está interessado apenas em arquivos regulares:

find /*/"$input1"/*/logs -mindepth 4 -type f -name '*.gz' \
    -exec gzip -cd {} + | grep -e "$input2"
    
por 01.03.2018 / 12:41

Tags