Ignora os arquivos ocultos do Windows ao copiar com o rsync

3

Eu preciso manter em sincronia uma estrutura de diretórios muito grande (algumas centenas de GB) entre uma máquina Windows e uma máquina Linux. Estou usando o rsync para fazer a cópia porque ele automaticamente ignora os arquivos inalterados e é mais eficiente na cópia de arquivos alterados (copiando apenas a diferença).

O problema que tenho é que alguns aplicativos em execução no sistema de arquivos do Windows gostam de gerar todos os tipos de arquivos de metadados que não quero copiar. Como todos esses arquivos estão ocultos usando os atributos de arquivo do Windows, achei que seria muito útil simplesmente instruir o rsync a ignorar esses arquivos. Mas a página man do rsync não oferece tal opção.

Atualmente, montei o sistema de arquivos do Windows usando o SMB. Quando eu uso um console para listar os arquivos no diretório (usando ls -l ), ele lista todos os arquivos, incluindo os arquivos ocultos, mas quando eu uso o nautilus para listar os arquivos, ele reconhece que alguns são arquivos ocultos e só os mostra para mim se eu ativar "mostrar arquivos ocultos". Portanto, não tenho certeza se o rsync pode até ver que os arquivos do Windows estão ocultos.

Todas as sugestões serão realmente úteis.

    
por Guss 12.11.2009 / 14:09

3 respostas

1

Para obter os atributos do DOS no Linux, você precisará editar o arquivo smb.conf.

Existem duas maneiras diferentes de importar atributos do Windows.

A primeira opção é definir map hidden = yes , o que significa que os arquivos ocultos no Windows terão o mundo executando bits definidos no Linux. Para que isso funcione, você também deve ter pelo menos 001 no seu create mask .

A outra opção é definir store dos attributes = yes , o que significa que os atributos do Windows serão armazenados em um atributo estendido no sistema de arquivos do Linux chamado user.DOSATTRIB.

rsync não tem a capacidade de filtrar arquivos com base em atributos normais ou estendidos, mas pode excluir uma lista de arquivos que você preparou de alguma outra forma. Você pode usar o comando find para criar essa lista com base nos atributos Unix. A versão do find parece não suportar atributos estendidos, mas ainda é possível usar a opção -exec em find para obter atributos estendidos de todos os seus arquivos e filtrá-los.

Como find pode filtrar em permissões normais do Unix, se você escolher a opção world execute bit, então find . -perm -001 encontrará todos os arquivos ocultos no sistema de arquivos do Windows montado. Você pode colocar essa lista em um arquivo e usar rsync --exclude-from=FILE para excluir esses arquivos do seu rsync.

    
por 15.11.2009 / 21:42
0

Eu não acredito que o rsync tenha algum insight sobre quais arquivos estão marcados como "Oculto" no compartilhamento de arquivos do Windows. Os arquivos têm algo mais em comum, como um formato de nomenclatura? Você pode usar as opções --exclude ou --exclude-from para padronizar os nomes de arquivos para não copiar. (A opção --exclude-from = xyz carrega essas exceções de um arquivo, enquanto a opção --exclude as especifica na linha de comando.)

    
por 12.11.2009 / 15:12
0

Eu não tenho uma resposta para você, mas não acho que o rsync seja o lugar certo para procurar. Eu tentaria encontrar algo nas opções de compartilhamento no lado do windows ou em opções mount.cifs.

Pode ser possível usar as extensões do ACL, mas não há nada nas permissões tradicionais do unix que ocultem um arquivo. É apenas oculto se tiver um período como o primeiro caractere no nome do arquivo / dir.

    
por 12.11.2009 / 15:32