rsync com dois pontos em nomes de arquivos

3

Eu tenho um diretório bastante grande que preciso sincronizar com um disco rígido externo por motivos de backup e portabilidade.

/work

Eu tento executar o seguinte comando rsync para copiar esta pasta para o meu disco rígido externo:

rsync -avz /work /media/extern_drive --max-size '4G'

O que parece funcionar bem, EXCETO que ele não copia nenhum arquivo com : .

Esta postagem fornece uma solução para um único arquivo: rsync: dois-pontos nos nomes dos arquivos , mas o problema é que tenho muitos desses arquivos espalhados em diretórios diferentes que não posso fazer manualmente.

Existe alguma maneira de recursivamente rsync quaisquer arquivos com dois pontos no nome do arquivo?

    
por Manila Thrilla 13.10.2014 / 15:35

2 respostas

2

Suponho que a sua unidade externa usa um sistema de arquivos como o VFAT, que não permite dois pontos nos nomes dos arquivos.

Uma opção simples seria fazer o backup de seus arquivos como arquivos compactados ( zip , 7z , tar.xz , o que for mais interessante). Dessa forma, você não estaria limitado por nenhuma característica do sistema de arquivos além do tamanho máximo de arquivo.

Outra possibilidade seria usar rdiff-backup , que cuida da tradução de nomes de arquivos que não se encaixam no sistema de arquivos de destino, como sugerido por poolie .

Uma abordagem genérica para caracteres não suportados é aproveitar a camada do sistema de arquivos para transformar os nomes dos arquivos. O FUSE sistema de arquivos posixovl transforma nomes de arquivos em nomes que o VFAT do Windows suporta.

mkdir ~/mnt
mount.posixovl -S /media/extern_drive ~/mnt
rsync -a /work ~/mnt
fusermount -u ~/mnt

Veja Como posso substituir dois pontos quando rsync em uma chave USB? para mais detalhes, e verifique se há qualquer nova solução que possa surgir.

    
por 14.10.2014 / 01:52
1

Eu tentaria incluir explicitamente o padrão de arquivos com dois pontos em seus nomes como este:

$ rsync -avz --include '*:*' /work /media/extern_drive --max-size '4G'

Exemplos

$ mkdir 1 2
$ touch 1/file{1..5}
$ touch 1/file:{1..5}
Excluindo-os explicitamente
$ rsync -avz --exclude '*:*' 1/ 2/
sending incremental file list
./
file1
file2
file3
file4
file5

sent 313 bytes  received 114 bytes  854.00 bytes/sec
total size is 0  speedup is 0.00
Incluindo explicitamente eles
$ rm -fr 2/*

$ rsync -avz --include '*:*' 1/ 2/
sending incremental file list
./
file1
file2
file3
file4
file5
file:1
file:2
file:3
file:4
file:5

sent 573 bytes  received 209 bytes  1,564.00 bytes/sec
total size is 0  speedup is 0.00
    
por 13.10.2014 / 15:49