Como rsync para android

50

Como posso me conectar ao meu dispositivo Android para rsync music (ou outras coisas)?

guettli
fonte
Eu recomendo editar isso para explicar exatamente qual ação produziu essa mensagem de erro. (Por exemplo, se é a saída de um comando, você pode incluir o comando completo.)
Elias Kagan
1
talvez interessante: Syncopoli
DJCrashdummy
@DJCrashdummy se você escrever seu comentário como resposta, vou votar novamente.
guettli
@ guettli eu escrevi isso apenas como comentário, porque o Syncopoli é apenas um cliente rsync (por enquanto).
DJCrashdummy

Respostas:

50

Na verdade, usando rsync sobre MTP / usb

É mais fácil do que todo mundo está dizendo, primeiro observe que quando o GVFS montar a montagem MTP, ela estará disponível em. Você pode forçar isso abrindo o telefone em um navegador de arquivos gráfico (thunar / nautilus / etc)

/run/user/$UID/gvfs

entra lá. Supondo que você tenha um dispositivo mtp, isso deve funcionar:

$ cd /run/user/$UID/gvfs/mtp*

Encontre para onde você deseja transferir os arquivos também e depois os sincronize novamente

$ cd SanDisk\ SD\ card/Movies/

$ pwd # prints "/run/user/1000/gvfs/mtp:host=%5Busb%3A003%2C096%5D/SanDisk SD card/Movies"

$ rsync --verbose --progress --omit-dir-times --no-perms --recursive --inplace ~/Videos/ ./

Opções de Rsync

  • --inplaceEu altamente sugerir o uso --inplacesem a qual mtp pode querer copiar o arquivo de um novo, e em seguida, mude o nome para o antigo. Isso pode resultar na cópia do arquivo para o cartão SD duas vezes: uma vez para a transferência mtp para o cartão SD e outra vez porque o driver MTP pode não suportar (mv), pode (cp / rm) sob o capô para ser seguro .
  • leia man rsync para uma descrição de --verbose, --progress, --recursivemas eles são bastante auto-documentado.
  • --omit-dir-times --no-perms são necessários porque o mtp não suporta isso.
Evan Carroll
fonte
3
Eu adiciono as seguintes opções --omit-dir-times --no-perms --ignore-existing. O Rsync falha ao definir os carimbos de data / hora do diretório no MTP. Tenho certeza de que "sem permissões" é o padrão, mas gosto de especificá-lo. Ignorar arquivos existentes permite que ele continue de onde parou.
Stephen Ostermiller
4
Por que --ignore-existing? Isso está apenas perdendo redundância. Você sempre pode --size-onlyreduzir a sincronização com a listagem de diretórios e não as somas de verificação. Vou adicionar o --omit-dir-timese --no-permsporque isso parece útil, e me lembro de ter recebido um erro no final sobre isso.
Evan Carroll
O Rsync tem problemas para definir os carimbos de hora corretamente sobre o MTP corretamente para mim, portanto, sem --ignore-existingele , ele tenta sincronizar todos os arquivos. Eu gosto da sua --size-onlysugestão. Vou tentar isso da próxima vez.
Stephen Ostermiller
3
Eu também uso colocar a barra final no destino, então eu não tenho que usar uma estrela na fonte:~/Videos/ ./
Stephen Ostermiller
Também precisei adicionar '--delete-after' para excluir os arquivos que eu já havia removido da pasta de músicas do computador. Portanto, o comando completo é: rsync --verbose --progress --omit-dir-times --no-perms --recursive --inplace --ignore-existente --delete-after / home / user / MUSIC /.
happyskeptic
39

Usando sshelper

Encontrei esta solução:

  • Instale o sshelper no dispositivo (não é necessário um dispositivo raiz, disponível no google play market)
  • Na minha WLAN, o dispositivo é chamado de "android". Mas você pode usar o IP, se não puder dar um nome de host ao dispositivo.

Edite ssh-config local, para alterar a porta padrão do host "android"

.ssh/config
host android
    Port 2222
  • Inicie o sshelper no dispositivo.
  • Conecte o dispositivo Android à sua WLAN.

rsync -rvlc Música android: SDCardLink /

Atualizar I prefere -rvlca -avez que você começa um monte de avisos desde a definição de permissões e time-stamps não funciona. A opção -ctorna a segunda sincronização muito mais rápida.

I prefere -rvl --size-onlya -avez que você começa um monte de avisos desde a definição de permissões e time-stamps não funciona. A opção --size-onlytorna a segunda sincronização muito mais rápida.

Infelizmente, é necessário algum tempo para que os aplicativos de música vejam os novos arquivos. Reiniciar o dispositivo ajuda.

guettli
fonte
13
Uma maneira alternativa de utilizar rsync com SSHelper sem ter de modificar .ssh / config: rsync -avz -e 'ssh -p 2222' Music android:SDCardLink/( stackoverflow.com/a/4630407/399105 )
bmaupin
1
@ guettli qual opção de soma de verificação -c para sincronizar arquivos de música? isso pode diminuir significativamente
EdiD 14/02
5
@guettli do rsync man: -c, --checksum. Sem essa opção, o rsync usa uma "verificação rápida" que (por padrão) verifica se o tamanho e o horário da última modificação de cada arquivo coincidem entre o remetente e o destinatário. Essa opção altera isso para comparar uma soma de verificação de 128 bits para cada arquivo que possui um tamanho correspondente. A geração da soma de verificação significa que os dois lados gastarão muitas E / S de disco lendo todos os dados nos arquivos na transferência, portanto isso pode tornar as coisas mais lentas.
EdiD 23/02
4
@ Guettli Eu acho que --size-onlyseria a solução mais rápida. No entanto, não é tão salvar como-c
niels
2
Usei o tethering USB e recebi transferências muito mais rápidas. O comando a seguir funcionou para mim depois que eu executei o SSHelp e ele mostrou o IP 192.168.1.5que pode ser diferente toda vez:rsync -avzhP --inplace --info=progress2 -e 'ssh -p 2222' 192.168.1.5:/storage/emulated/0/DCIM/Camera/ /home/username/path/to/pics/
Organic Addict
3

O backup rsync para Android pode ser configurado para sincronizar ao contrário, ou seja, de um host Linux para um dispositivo Android.

E com a ajuda do LlamaLab Automate, é possível configurar o dispositivo Android para sincronizar automaticamente em condições específicas, por exemplo:

  1. às 5 da manhã,
  2. quando o telefone estiver conectado a um Wi-Fi específico e
  3. quando está carregando.
Alexander Shcheblikin
fonte