Esvazie todos os arquivos de log em um diretório

0

Recentemente encontrei esta página que indica como esvaziar um arquivo. Como posso fazer isso para todos os arquivos em uma determinada subpasta?

Por exemplo, usando > file.log para esvaziar um arquivo?

Eu basicamente quero criar uma imagem de instância de VM e gostaria de limpar os arquivos de log existentes. Assim, quando o modelo é usado, ele é iniciado sem os dados remanescentes

    
por Cyril Duchon-Doris 09.09.2018 / 14:54

2 respostas

3

com

for i in /var/log/*; do
    > "$i"
done

Se você quiser evitar as mensagens de erro dos diretórios, inclua um teste.

for i in /var/log/*; do
    test -f "$i" && > "$i"
done
    
por 09.09.2018 / 15:12
2

Outra opção, em um único comando, seria truncate :

truncate -s /var/log/*

O acima irá emitir erros para qualquer subdiretório do / var / log, embora:

truncate: cannot open '/var/log/subdir' for writing: Is a directory

... o que você pode silenciar, largando stderr:

truncate -s /var/log/* 2>/dev/null

Se não houver arquivos ou diretórios, você deve tomar cuidado com a opção nullglob shell atual. Por padrão, está desativado:

$ shopt nullglob
nullglob        off

... que deixará o * não expandido e, portanto, truncate criará um arquivo chamado * . Você pode evitar isso de duas maneiras:

  1. defina nullglob: shopt -s nullglob antes de executar truncate . Você vai então (se você não tiver desistido stderr) ver um erro:

    truncate: missing file operand

  2. informe truncate para não criar arquivos ausentes: truncate --no-create -s 0 /var/log/*

por 09.09.2018 / 17:32

Tags