TAR: vários diretórios em um script bash

0

Estou tentando arquivos TAR em cinco diretórios diferentes com menos de sete dias.

Usando o comando find, eu posso encontrar os arquivos que eu preciso para TAR depois que eu usar isso:

find /opt/splunk/var/lib/splunk/firewall/db/ -type f -mtime -7
find /opt/splunk/var/lib/splunk/cb/db/ -type f -mtime -7
find /opt/splunk/etc -type f -mtime -7
find /opt/splunk/var/lib/splunk/cb/db/ -type f -mtime -7
find /opt/splunk/var/lib/wineventlog/db -type f -mtime -7

E posso encontrar vários arquivos que precisam de backup nesses cinco diretórios.

Como faço para TAR estes arquivos que eu encontrei usando o comando find, e certifique-se de que só pega os arquivos que são 7 dias de idade? Depois de fazer isso, gostaria de ativá-los em um arquivo grande e rsync-los para um servidor remoto.

Aqui está um script que eu corria atualmente em um cron semanal, mas é um pouco demais, pois precisamos apenas de arquivos com 7 dias de idade nesses diretórios.

#!/bin/bash
name=$(date '+%y-%m-%d')
tar -zcf /opt/splunk/var/backups/splunkbackup$(date '+%y-%m-%d').tar.gz 
/opt/splunk/etc /opt/splunk/var/lib/splunk/firewall 
/opt/splunk/var/lib/splunk/ossec /opt/splunk/var/lib/wineventlog 
/opt/splunk/var/lib/cb
rsync -avz --remove-source-files /opt/splunk/var/backups/splunkbackup* 
svc_splkbup@HOST:/var/log/splunk/backups/indexer
    
por WeAreOne 21.02.2018 / 19:49

2 respostas

1

como por man tar use -T ou -N

-T

 find ... | tar czf XXX.tgz -T -

onde

  • ... é seu find opções
  • XXX.tgz seu arquivo tar
  • -T - instrui o tar para ler o arquivo a ser tarado de stdin

−N

-N , --newer também pode ser usado, você primeiro precisa gerar um arquivo ou uma data de 7 dias ( touch -7 days ou date -7 days )

 tar -czf XXX.tgz -N ref /opt/splunk/{etc,var/lib,var/lib/w}

onde

  • ref é seu arquivo ou data de referência
  • /opt/splunk/{etc,var/lib,var/lib/w} será expandido para /opt/splunk/etc /opt/splunk/var/lib /opt/splunk/var/lib/w
  • observe que não há find
por 21.02.2018 / 20:57
-1

Você usa a implementação correta de tar, isso é simples:

star -c -f out.tar -find /opt/splunk/etc -type f -mtime -7

Você pode adicionar mais nomes de diretório após o argumento -find .

Isso é muito mais rápido do que usar find em um processo separado, pois as chamadas stat(2) feitas dentro de libfind são usadas pelo código star e não há necessidade de fazer isso uma segunda vez.

    
por 26.06.2018 / 12:57