rsync: Pode transferir arquivos ignorando o tamanho (comparando apenas timestamp e nome)?

2

O rsync pode comparar / copiar com base na data e no nome do arquivo, ignorando o tamanho do arquivo?

Contexto: Estou tentando implementar um backup de dois estágios usando o rsync. O primeiro estágio é no local, e eu tenho um script bash rsync para copiar arquivos do caminho de origem para o armazenamento no local, e isso é executado de hora em hora. O segundo estágio é executado à noite e usa o rsync para transferir tudo novo / modificado para um data center externo a partir do armazenamento no local. O problema é que as caixas de armazenamento no local estão sendo preenchidas. Nem reduzir os dados armazenados em backup nem aumentar a capacidade de armazenamento é uma opção.

Eu escrevi um script de limpeza para remover arquivos com um ano ou mais todas as noites nas caixas de armazenamento on-site e substituí-los por arquivos de toque vazios, preservando o registro de data e hora dos arquivos originais - isso é para evitar rsync de copiar o mesmo arquivo da origem após o arquivo de destino ser removido. Mas não consigo descobrir como dizer ao rsync para ignorar tamanhos de arquivo; Eu preciso que ele ignore a comparação / cópia com base na data de modificação e nome de arquivo sozinho.

Eu já passei pelas man pages e procurei, e não parece que isso seja possível. Isso está correto? Alguma idéia de solução alternativa?

    
por kiwisan 22.05.2013 / 11:34

3 respostas

1

O rsync não parece ser capaz de ignorar o tamanho do arquivo.

Uma possível solução alternativa, se os dados reais do arquivo não importam, é criar arquivos de destino esparsos com o mesmo tamanho dos arquivos de origem. Exemplo:

dd if=/dev/urandom bs=1M count=4 of=a
rsync -a a b
truncate -s 0 b && truncate -r a b && touch -r a b

b agora está vazio e não usa espaço (se o sistema de arquivos suportar arquivos esparsos), mas ainda tem o mesmo tamanho que a .

rsync -a a b
du -h a b
# 4.0M    a
# 0       b

Como pode ser visto pela saída de du , b não foi atualizado, pois ainda não usa espaço.

    
por 28.05.2013 / 00:26
0

Acho que o que você quer é:

--delete                delete extraneous files from dest dirs

Isso removerá os arquivos do destino se eles tiverem sido excluídos no diretório de origem.

É claro que isso significaria que você precisaria parar de criar arquivos vazios em vez de simplesmente excluir os arquivos expirados.

    
por 22.05.2013 / 18:51
0

Você pode usar a opção --update para "ignorar arquivos mais recentes no receptor", mas não pode preservar o registro de data e hora ao tocar nos arquivos de alocador de espaço (se a página de manual for precisa ao dizer "mais recente" e não "data igual ou mais recente").

    
por 23.08.2013 / 03:52