> 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