No trabalho, nosso grande sistema corporativo gera uma tonelada métrica de arquivos de log de várias partes do sistema. Eles podem chegar facilmente a centenas de megabytes cada um e, embora sejam extremamente úteis para depurar e monitorar nossos ambientes de desenvolvimento e teste, são um incômodo para o espaço em disco e para procurar um determinado problema.
De vez em quando, precisamos organizá-los e a maneira mais rápida é simplesmente excluí-los todos e deixar que o sistema os recrie. No entanto, fazer isso significa que você precisa de um arquivo para tail -f
ativar se estiver procurando por algo. Às vezes, é uma dor de cabeça remover e recriar arquivos, e sempre há a chance de erro humano em obter nomes e / ou permissões corretas.
Portanto, aqui está uma alternativa rápida para o bash. Obviamente, você poderia fazer isso na linguagem de script de sua escolha, pois todos eles têm um bom manuseio de arquivos.
Ele aproveita duas coisas que você pode fazer diretamente da linha de comando.
O primeiro é truncar um arquivo por meio de redirecionamento
$ ls -l a_file.txt
-rw-r--r-- 1 auser auser 33 Nov 11 17:07 a_file.txt
$ > a_file.txt
$ ls -l a_file.txt
-rw-r--r-- 1 auser auser 0 Nov 11 17:07 a_file.txt
Ao redirecionar nothing
para o arquivo, ele substitui qualquer conteúdo do arquivo e o trunca para 0 bytes. Observação: isso também criará o arquivo se ele ainda não existir
Em seguida, usamos um for
loop simples para iterar sobre uma lista de arquivos e aplicar o comando
for each f in *.log; do > f; done
Neste caso estamos globbing
para todos os arquivos com a .log
extensão no diretório atual e aplicando nosso truncamento, deixando-nos uma lista de arquivos de log em 0 bytes com todos os nomes de arquivo e permissões corretos.
Retirado do meu blog em http://www.fullybaked.co.uk/