> 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