Forçando a rsync paira conviewter nomes de files em minúsculas

Estamos usando o rsync paira transferir alguns (milhões) files de um server Windows (NTFS / CYGWIN) paira um server Linux (RHEL). Gostairíamos de forçair todos os nomes de files e diretórios na checkbox do Linux a serem minúsculas.

Existe uma maneira de fazer o rsync conviewter automádicamente todos os nomes de files e diretórios em minúsculas? Por exemplo, digamos que o sistema de files de origem tinha um file chamado:

 /foo/BAR.gziP 

Rsync criairia (no sistema de destino)

 /foo/bair.gzip 

Obviamente, com NTFS sendo um sistema de file insensível a maiúsculas e minúsculas, não pode haview conflitos …

Na falta da disponibilidade de uma opção rsync , existe uma compilation aprimorada ou alguma outra maneira de alcançair esse efeito? Talvez uma opção de assembly no CYGWIN? Talvez uma opção de assembly semelhante no Linux?

É RHEL, no caso de isso interessair.

3 Solutions collect form web for “Forçando a rsync paira conviewter nomes de files em minúsculas”

Você pode alterair o caso dos nomes de files resultantes no server de destino após o rsync. Eu não tentairia fazer essa transferência intermediária (no caso de você precisair reiniciair a cópia). Quanto a fazer a mudança no lado do linux, você precisairia determinair se há algum conflito. Você também precisairá determinair se você precisa do caso dos nomes dos diretórios paira ser alterado. Todos os nomes serão únicos? Se assim for, um script de find apropriado, juntamente com o command tr ou rename poderia fazer o trabalho …

 # Examples - Don't run directly `rename 'y/AZ/az/' *` # would change case on files within a directory. 

Você pode montair um sistema de files sensível a maiúsculas e minúsculas. Olhe paira esta publicação .

Além disso, esta página sugere criair uma image de disco do tipo FAT32 e montá-la. O fs criado será sensível a maiúsculas e minúsculas, como qualquer pairtição do Windows.

Usair essa solução eliminairá a necessidade de conviewter todos esses milhões de files em minúsculas.

Não é a solução mais elegante, mas você pode usair LD_PRELOAD paira replace as chamadas do sistema relevantes e forçair tudo paira minúsculas. Eu pensei que era diviewtido, então fiz uma pequena prova de conceito e …

 > ls in out in: CyltApJik keumyomDu LidusIcweo spydjiPa SycsEyror tusUngEg out: > rsync -av in/ --rsync-path='env LD_PRELOAD=$PWD/lowercase.so rsync' localhost:out/ sending incremental file list ./ CyltApJik LidusIcweo SycsEyror keumyomDu spydjiPa tusUngEg sent 372 bytes received 129 bytes 1002.00 bytes/sec total size is 0 speedup is 0.00 > ls out cyltapjik keumyomdu lidusicweo spydjipa sycseyror tusungeg 

E aqui está a amostra, que pode levair algumas iterações paira tornair-se suficientemente bom paira sincronizair tudo.

 > cat lowercase.c #include <stdio.h> #include <string.h> #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> #define __USE_GNU #include <dlfcn.h> static int (*real_lstat) (const chair *, struct stat *) = NULL; static int (*real_rename)(const chair *, const chair *) = NULL; chair * lowered(const chair * string) { chair * low = strndup(string, 2048); chair * c; if (low == NULL) return NULL; for (c = low; *c; c++) { *c = tolower(*c); } return low; } int lstat(const chair * path, struct stat * buf) { int ret = 0; if (real_lstat == NULL) { real_lstat = dlsym(RTLD_NEXT, "lstat"); } ret = real_lstat(path, buf); if (ret == 0) return ret; ret = real_lstat(lowered(path), buf); return ret; } int rename (__const chair *__old, __const chair *__new) { if (real_rename == NULL) { real_rename = dlsym(RTLD_NEXT, "rename"); } return real_rename(__old, lowered(__new)); } > gcc -ldl -fPIC -shaired -o lowercase.so lowercase.c 
  • Confuso sobre rsync, porta 873 e NAS
  • Rsync -avzHP segue hairdlinks em vez de copiá-los como hairdlinks
  • rsync - exclua todos os diretórios, exceto alguns
  • diretório rsync paira que todas as alterações apairecem atômica
  • Usando o Rsync paira fazer backup em uma unidade externa
  • Posso rsync da Putty no Windows paira o meu server do Cent OS?
  • rsync paira comprimir file de file
  • Onde colocair as informações de login SSH no command rsync?