Como gerar um relatório de texto no Linux?

0

Eu tenho um comando que estou usando para encontrar todos os arquivos *.xml em nosso servidor. Estou usando:

find -type f -exec grep -il "xml" {} \;

Isso é ótimo, mas talvez haja mil arquivos como esse no servidor, e minha janela se enche.

Gostaria de gerar um relatório e salvá-lo em algum lugar no servidor ou até mesmo enviar um e-mail para mim.

Eu também gostaria de especificar para procurar somente nos últimos 5 dias quando gerar este relatório.

    
por Markus Alison 18.04.2016 / 03:10

1 resposta

2

Vamos começar salvando o arquivo em algum lugar primeiro.

Assuma o seu comando:

find -type f -exec grep -il "xml" {} \;

e leia: Quais são os operadores de controle e redirecionamento do shell? para onde ele diz:

> : Directs the output of a command into a file.

para tornar seu comando algo como:

find -type f -exec grep -il "xml" {} \; > /tmp/report.txt

Aproveito esta oportunidade para recomendar alguns ajustes ao seu comando find atual:

  1. Pode ser uma preferência pessoal (ou memória herdada da minha parte), mas gosto de especificar o diretório inicial para find , assim:

    find / -type f ....

para que não importe de onde você começa o comando ou o script, ele sempre produzirá os resultados esperados.

  1. Seu comando find não está procurando por arquivos "* .xml", ele está procurando por arquivos que contenham a cadeia "xml" (sem distinção entre maiúsculas e minúsculas). Se a pesquisa de conteúdo for o que você deseja, pare de ler este parágrafo. Se você realmente quiser encontrar arquivos que tenham "xml" em seu nome de arquivo , procure por algo como: find / -type f -iname '*xml*' - onde iname informa find para corresponder a nomes de arquivos que contêm -insensível) "xml". Se você só se preocupa com "xml" estando no end do nome do arquivo, use find / -type f -iname '*xml' ou ... -iname '*.xml , se quiser um período antes do xml.

2a. Se você está querendo pesquisar o conteúdo dos arquivos, considere alterar seu caso geral grep para um que diga ao grep que você está procurando uma string fixa: ... grep -Fil xml ... para acelerar as coisas um pouquinho.

  1. Para informar a localização para relatar apenas os arquivos que foram modificados nos últimos cinco dias, use -mtime -5 .

  2. Como você marcou o Q como Linux, presumo que você tenha o GNU find ( man find e procure por "GNU" na Descrição para confirmar). Nesse caso, pode acelerar um pouco mais o processo dizendo find para passar vários arquivos para cada exec usando esta sintaxe: find / -type f -mtime -5 -exec grep -Fil xml {} + > /tmp/report.txt

por 18.04.2016 / 03:35