rsync com dois pontos em nomes de arquivos

rsync com dois pontos em nomes de arquivos

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

/work

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

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

O que parece funcionar bem, EXCETO que não copia nenhum arquivo que contenha a :.

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

Existe alguma maneira de sincronizar novamente recursivamente qualquer arquivo com dois pontos no nome do arquivo?

Responder1

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

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

Outra possibilidade seria usarrdiff-backup, que se encarrega de traduzir nomes de arquivos que não cabem no sistema de arquivos de destino, comosugeridoporpiscina.

Uma abordagem genérica para caracteres não suportados é aproveitar a camada do sistema de arquivos para transformar os nomes dos arquivos. OFUSÍVELsistema de arquivoposixovltransforma nomes de arquivos em nomes suportados pelo VFAT do Windows.

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

VerComo posso substituir dois pontos ao sincronizar novamente em uma chave USB?para obter mais detalhes e verifique esse tópico para qualquer nova solução que possa surgir.

Responder2

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

$ 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-os explicitamente
$ 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

informação relacionada