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
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
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:
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
informe truncate
para não criar arquivos ausentes: truncate --no-create -s 0 /var/log/*