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