Truncando uma lista de arquivos no CentOS

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 -fativar 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 nothingpara 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 forloop simples para iterar sobre uma lista de arquivos e aplicar o comando

for each f in *.log; do > f; done

Neste caso estamos globbingpara todos os arquivos com a .logextensã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/