Descompactar arquivos quando o rsync'in

1

Eu tenho 22.000 arquivos gzip em um servidor remoto, o que eu gostaria de transferir para a minha máquina. Eu também gostaria de descomprimir esses arquivos antes / durante a transferência. É possível?

Meu comando rsync atualmente é:

rsync -chavzP test@server1:/var/www/html/reports/id00003383.gz /home/myself/reports/id00003383.pdf

Nota: o arquivo id00003383.pdf reside no arquivo gz id00003383.gz.

Se não for possível, tenho outra alternativa?

    
por name_masked 13.02.2014 / 00:09

2 respostas

1

Tanto quanto sei, o rsync não tem essa capacidade. Eu não recomendaria descompactar antes de transferir os arquivos, a menos que o seu cliente seja realmente lento comparado ao tempo extra de transferência da rede antes de fazer a descompressão.

Se você estiver interessado em programar, o melhor conselho que posso dar é dar uma olhada em rdiff-backup , que é um programa baseado em Python no topo da biblioteca libsync1 . Você deve ser capaz de pendurar em um teste & descomprima em cada arquivo transferido lá.

Isso parece uma rota provável para capturar os dados antes de serem gravados. E seria mais rápido do que um processo assistir rsync output e tentar descompactar o que acaba de ser transferido e já gravado no disco.

    
por 13.02.2014 / 08:30
1

Não consigo pensar em uma maneira fácil de aproveitar o rsync e executar a descompactação. Você pode fazer a descompressão por meio de uma biblioteca pré-carregada personalizada ou de um sistema de arquivos FUSE personalizado (no lado remoto, ao lado dos arquivos compactados com gzip), mas isso seria muito trabalhoso.

Se você puder assumir que o registro de data e hora do arquivo compactado corresponde ao registro de data e hora do arquivo gzipado e é aceitável transferir arquivos inteiros em caso de modificação, não será necessário utilizar os recursos de atualização incremental do rsync. O mesmo acontece se os arquivos nunca forem modificados depois de serem criados.

O primeiro obstáculo é que esta é uma cópia remota. Elimine o problema montando o diretório remoto com SSHFS para que ele esteja disponível como um sistema de arquivos local.

Agora você pode usar find para percorrer a árvore de diretórios, criar diretórios conforme necessário e gzipar arquivos em tempo real.

mkdir server1
sshfs test@server1:/var/www/html/reports server1
cd server1
find . \( -type d -o -type f -name .gz \) -exec sh -c '
  for x; do
    if [ -d "$x" ]; then
      [ -d "$0/$x" ] || mkdir "$0/$x"
    else
      zcat "$x" >"$0/$x"
      touch -r "$x" "$0/$x"
    fi
  done
' /home/myself/reports {} +
    
por 13.02.2014 / 09:04

Tags