Como limpar o arquivo de log? [duplicado]

161

Existe uma maneira melhor de limpar o arquivo de log? Eu normalmente apago o arquivo de log antigo e crio um novo arquivo de log e estou procurando por um programa mais curto de tipo / bash / command. Como posso usar um alias?

    
por Bytemain 25.09.2013 / 22:14

1 resposta

322
> logfile

ou

cat /dev/null > logfile

ou

true | tee logfile

(fique à vontade para substituir false ou qualquer outro comando que não produza saída, como por exemplo : em bash ) se você quiser ser mais eloqüente, todos esvaziarão logfile (na verdade eles truncarão para zero tamanho).

Se você quiser saber quanto tempo "leva", você pode usar

dd if=/dev/null of=logfile

(que é o mesmo que dd if=/dev/null > logfile , a propósito)

Você também pode usar

truncate --size 0 logfile

(ou truncate -s 0 logfile ) para ser perfeitamente explícito ou, se você não quiser,

rm logfile

(nesse caso, você está contando com o comportamento comum de que os aplicativos geralmente recriam um arquivo de log, se ele já não existir).

No entanto, como os arquivos de log geralmente são úteis, você pode compactar e salvar uma cópia. Embora você possa fazer isso com seu próprio script, é uma boa ideia, pelo menos, tentar usar uma solução de trabalho existente, neste caso logrotate , que pode fazer exatamente isso e é razoavelmente configurável.

Se você precisar fazer isso para vários arquivos, o caminho seguro é

truncate -s 0 file1 file2 ...

ou

> file1 > file2 ...

Alguns shells ( zsh ) também permitem especificar vários alvos de redirecionamento.

Isso funciona (pelo menos em bash ), pois cria todos os redirecionamentos necessários, embora apenas o último capture qualquer entrada (ou nenhuma neste caso). O exemplo tee com vários arquivos deve funcionar em qualquer caso (dado que seu tee sabe como lidar com vários arquivos de saída)

Claro, o bom e velho loop de shell também funcionaria:

for f in file1 file2 ... ; do
    # pick your favourite emptying method
done

embora seja muito mais lento devido ao comando ser executado separadamente para cada arquivo. Isso pode ser ajudado usando find :

find <criteria matching required files> \
    -exec <command capable of zeroing several files> {} \+

ou

find <criteria matching required files> -delete
    
por 25.09.2013 / 22:26

Tags