Como arquivos scp / tar que estão entre dias específicos?

5

Eu preciso copiar arquivos de log db entre dois servidores Suse, onde estou interessado em arquivos SOMENTE entre 10.3.2013 - 13.3.2013

Deseja-se comprimir os arquivos antes de copiá-los, então eu os tar e scp. Atualmente estou usando tar -cvzf /tmp/saas_archive_logs.tar.gz /var/lib/edumate/backup/archive_logs/db2inst1/SAAS --newer-mtime=2013-03-10 que me dá todos os arquivos de 10.3.2013 até agora. Mas eu não preciso de todos eles. E eu não encontrei nenhum interruptor de alcatrão.

    
por Radek 12.04.2013 / 04:01

2 respostas

8

Como Bichoy indicou, você pode usar o comando find para encontrar arquivos com um tempo específico de acesso, criação e modificação. No entanto -mtime leva um deslocamento em incrementos de 24 horas e nem sempre é conveniente calcular a menos que você queira algo de uma quantidade específica de números de 'dias' atrás. Você precisará combinar isso com -daystart para 'arredondar' para o começo do dia.

Eu acho mais conveniente no seu caso, é a opção -newermt que leva um datestringring (e não o nome de um arquivo de referência como a maioria das versões new-newer)

Combine isso com a opção find -print0 para manipular arquivos com espaços no nome e, opcionalmente, -type f para não obter diretórios no período em que você está interessado:

find /var/lib/edumate/backup/archive_logs/db2inst1/SAAS \
   -newermt 20130310 -not -newermt 20130314 -type f -print0 \
   | xargs -0 tar -cvzf /tmp/saas_archive_logs.tar.gz 

Há um grande problema com isso: no caso de o número de arquivos encontrados se tornar muito longo, xargs invocará seu comando (neste caso tar ) várias vezes, pois xargs precisa ajustar os argumentos no linha de comando que não é infinita. Para contornar que eu sempre uso cpio , que lê nomes de arquivos de stdin. Com o parâmetro --format=ustar para obter um arquivo tar POSIX, e no seu caso você precisaria enviar a saída através de gzip para obter o resultado desejado:

find /var/lib/edumate/backup/archive_logs/db2inst1/SAAS \
   -newermt 20130310 -not -newermt 20130314 -type f -print0 \
   | cpio --create --null  --format=ustar \
   | gzip > /tmp/saas_archive_logs.tar.gz
    
por 12.04.2013 / 07:33
3

Você pode verificar o comando find para obter uma lista dos arquivos que precisam ser tarados. Você pode especificar uma data de início e de término (com precisão de até segundos) usando os argumentos normais -atime , -btime , -mtime ... em combinação com o argumento -not . Você pode, então, canalizar a saída para xargs e, em seguida, para tar . Verifique a página de manual de find para detalhes sobre argumentos de hora.

Atualização: Como Anthon sugeriu, você pode usar os modificadores +/- com -mtime para especificar o período sem usar -not . Aqui está um exemplo:

find . -mtime -5d2h3m10s -mtime +4d0h15m20s -print0 | xargs -0 tar cjvf mytar.tar.bz2

Em que d, h, m, s corresponde a dias, horas, minutos e segundos , respectivamente. Isso fornecerá arquivos modificados mais recentes que 5d2h3m10s e mais antigos que 4d0h15m20s

    
por 12.04.2013 / 05:16

Tags