@ John1024 já deu uma uma boa resposta , mas eu pensei em adicionar um pouco mais
Em algumas circunstâncias, você pode adicionar arquivos a um tar
archive existente. Por exemplo, você tem um arquivo de arquivos de log para cada mês e deseja adicionar os arquivos de log diários a esse arquivo todas as noites após a rotação do arquivo de log que pode ocorrer à meia-noite.
Se o seu arquivo for chamado /data/logs/logfiles-2016-08.tar
para agosto e os próprios arquivos de log girados, para uma data específica, forem chamados /var/log/servicename-2016-08-06.log
(para vários valores diferentes de servicename
), você pode ter um script pequeno chamadas de trabalho cron às 3 da manhã que faz
#!/bin/sh
yyyymm="$( date --date="1 day ago" +"%Y-%m" )"
yyyymmdd="$( date --date="1 day ago" +"%Y-%m-%d" )"
for logfile in /var/log/*-$yyyymmdd.log; do
tar -r -C /var/log -f "/data/logs/logfiles-$yyyymm.tar" "${logfile##*/}" &&
rm "${logfile##*/}"
done
O sinal -r
informa tar
para anexar entradas ao arquivo. O -C
flag é usado para informar tar
para alterar o diretório para /var/log
antes de acessar os arquivos de log. O sinalizador -f
especifica a localização do arquivo. O ${logfile##*/}
expandirá para o nome da base (o nome do arquivo sem caminho) do arquivo de log (isso pode ser substituído por $(basename "$logfile")
).
No início de cada mês, você pode compactar o arquivo de log do mês anterior com
#!/bin/sh
yyyymm="$( date --date="1 month ago" +"%Y-%m" )"
gzip --best "/data/logs/logfiles-$yyyymm.tar"
Isso é um pouco mais complicado do que apenas fazer
cd /var/log &&
tar -c -z -f /data/logs/logfiles-2016-08.tar.gz *-2016-08-??.log &&
rm *-2016-08-??.log
uma vez por mês, mas pode haver razões para fazê-lo mesmo assim.
Nota: Um arquivo pode ser adicionado a um arquivo com tar -r
, mas o arquivo não pode ser um arquivo compactado no momento (GNU tar
pode suportar isso). Se o arquivo não existir, ele será criado. Observe também que meus exemplos acima requerem o GNU date
.