Como manter eficiente o arquivo tar instantâneo atualizado?

1

Eu tenho um grande diretório de arquivos e eu gostaria de manter um único arquivo tar compactado que eu possa servidor sobre http contendo todos os arquivos que são atualizados uma vez por dia.

Muitos dos arquivos não serão alterados diariamente e eu gostaria de evitar horas de processamento do processador compactando os mesmos arquivos todos os dias.

tar "não é possível atualizar arquivos compactados", portanto, tar uj não ajudará.

Existe uma maneira inteligente de fazer isso?

    
por artfulrobot 18.11.2013 / 11:04

2 respostas

0

Como isso é acessado via http, use PHP para gerar o arquivo tar rapidamente usando algo parecido com isto:

<?php
    set_time_limit(1);
    header("Pragma: public"); // required
    header("Expires: 0");
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    header("Cache-Control: private",false); // required for certain browsers
    header("Content-Type: application/x-bzip2; charset=binary");
    header("Content-Disposition: attachment; filename=\"archive.tar.bz2\";" );
    passthru("tar cj --exclude-vcs /path/to/files",$err);
    if ($err) {
        error_log("exit value: $err");
    }
    exit;

Obviamente, isso não ajuda no caso de muito download deste arquivo.

    
por 18.11.2013 / 11:52
0

Essa ideia estava em um fórum de consultoria para concorrentes .

tar cf --newer YYYYMMDD

    To copy differences or only the files since the last tar date 
    here is the command.

    Let's say we did a tar on Feb 9th, 2009 as follows:
    (cd /mydata; tar cf - *) | tar xvf -

    Today is Feb 11th and we only want to copy the files that have changed 
    since Feb 9th, 2009. The command would be
    (cd /mydata; tar cf - --newer 20090209 * ) | tar xvf - 
    
por 18.11.2013 / 11:55