Questão Torne o caso do rsync insensível


Estou rsync'ing 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 ter o rsync ignorando o caso?


3


origem




Respostas:


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

-y, --fuzzy

Essa opção informa ao rsync que ele deve procurar um arquivo base para qualquer arquivo de destino que esteja faltando. O algoritmo atual procura no mesmo diretório que o arquivo de destino para um arquivo com tamanho e tempo de modificação idênticos ou um arquivo de nome semelhante. Se encontrado, o rsync usa o arquivo base fuzzy para tentar acelerar a transferência.

Note que o uso do --excluir opção pode se livrar de qualquer arquivo de correspondência difusa em potencial, então use - Excluir depois ou especifique algumas exclusões de nome de arquivo se você precisar evitar isso.


2





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


2



Por que isso não está no código principal? Por que deixar um patch não aplicado? O GNU tar tem --ignore-case e pode alternar facilmente entre arquivos de exclusão com distinção entre maiúsculas e minúsculas e arquivos de exclusão ignorados por maiúsculas e minúsculas na mesma linha de comando. - Brendan Byrd
Eu notaria que ignore-case.patch reside no rsync-patches-x.y.z.tar.gz arquivo (onde x.y.z denota o número da versão). - jjlin


Normalmente, o Windows ignora caso, mas preserva isto. 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 seu caso.

Então você fica com ""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 esta sintaxe, você pode usar este comando perl:

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

E convertê-lo de volta para a forma legível com

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

(O -i.bak opção 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.


2





Não existe 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 essa combinação deve ser evitada.


1