Fazer com que o rsync seja insensível

3

Estou rsync'e um monte de arquivos entre um sistema Windows e Linux. Como nem todo o Windows se preocupa com maiúsculas e minúsculas, alguns dos arquivos no sistema Windows não têm mais a mesma estrutura que tinham no sistema Linux. Mas o rsync agora trata esses arquivos como diferentes e carrega uma nova cópia.

É possível ignorar o caso do rsync?

    
por Wim 12.03.2011 / 19:13

4 respostas

2

O Rsync tem o que eles chamam de um "patch mantido" que adiciona uma opção --ignore-case . Você precisa compilar o rsync da fonte para isso, e aplicar ignore-case.patch . Você precisa da versão de rsync corrigida tanto no local quanto no lado remoto.

    
por 14.03.2011 / 21:17
2

Você pode tentar usar o sistema de correspondência fuzzy do rsync:

-y, --fuzzy

This option tells rsync that it should look for a basis file for any destination file that is missing. The current algorithm looks in the same directory as the destination file for either a file that has an identical size and modified-time, or a similarly-named file. If found, rsync uses the fuzzy basis file to try to speed up the transfer.

Note that the use of the --delete option might get rid of any potential fuzzy-match files, so either use --delete-after or specify some filename exclusions if you need to prevent this.

    
por 12.03.2011 / 20:29
2

Normalmente, o Windows ignora caso, mas preserva o mesmo. Se seus nomes de arquivos mudarem de maiúsculas e minúsculas, deve ser devido a algum programa diferente de rsync que copiou arquivos e desconfiou o caso durante a cópia. Esse programa provavelmente está configurado incorretamente. Ou, se você usa um servidor Samba, talvez esteja mal configurado. Por padrão, o Samba também preserva o caso de nomes de arquivos.

Então, talvez você possa resolver o problema de nomes de arquivos mudando inesperadamente o caso deles.

Então você fica com " apenas " o problema da diferenciação de maiúsculas e minúsculas dos filtros. Se isso acaba sendo o seu caso, e você está relutante em aplicar o patch sugerido por Wim, você pode usar classes de caracteres nos filtros.

É feio e chato, mas funciona:

--exclude="[Tt][Ee][Mm][Pp]/"

ou em um arquivo de filtro:

- Temp/
- temp/
- TEMP/

ou o mais genérico, mas ilegível:

- [Tt][Ee][Mm][Pp]/ 

Se você quiser automatizar a conversão de arquivos de filtro para essa sintaxe, use este comando perl:

perl -i.bak -pe 's/([a-z])/[\U$1\E$1]/g' your_rsync-filter.txt

E converta-o de volta para uma forma legível por humanos com

perl -i.bak  -pe 's/ \[ [A-Z] ([a-z]) \] /$1/xg' your_rsync-filter.txt

(A opção -i.bak faz um backup e converte o arquivo no local em vez de stdout)

Pelo menos para filtros e opções de inclusão / exclusão, seria muito bom ter um sinalizador sem distinção entre maiúsculas e minúsculas no rsync. Até lá, as únicas opções parecem ser o patch ou a sintaxe complicada do tipo regex.

    
por 10.11.2012 / 12:38
1

Não há uma opção específica para tornar o rsync insensível a maiúsculas e minúsculas. Embora o NTFS preserve o caso, você não deve ter muito problema com ele. Por outro lado, sistemas de arquivos FAT têm mais problemas com o rsync e tal combinação deve ser evitada.

    
por 12.03.2011 / 20:46