Jak synchronizować rsync z Androidem

50

Jak mogę połączyć się z moim urządzeniem z Androidem w celu rsync muzyki (lub innych rzeczy)?

guettli
źródło
Zalecam edycję tego, aby dokładnie wyjaśnić, jakie działanie spowodowało ten komunikat o błędzie. (Na przykład, jeśli jest to wynik polecenia, możesz dołączyć pełne polecenie.)
Eliah Kagan,
1
może interesujące: Syncopoli
DJCrashdummy
@DJCrashdummy, jeśli napiszesz komentarz jako odpowiedź, podniosę głos.
guettli
@ guettli napisałem to tylko jako komentarz, ponieważ Syncopoli jest tylko klientem rsync (na razie).
DJCrashdummy

Odpowiedzi:

50

Właściwie używając rsync przez MTP / usb

To łatwiejsze niż wszyscy mówią, po pierwsze zauważ, że kiedy GVFS montuje MTP, będzie on dostępny pod. Możesz to wymusić, otwierając telefon w graficznej przeglądarce plików (thunar / nautilus / etc)

/run/user/$UID/gvfs

idź tam. Zakładając, że masz jedno urządzenie mtp, powinno to działać:

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

Znajdź, gdzie chcesz przesłać pliki, a następnie zsynchronizuj je z nimi

$ 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/ ./

Opcje Rsync

  • --inplace: Zdecydowanie sugeruję użycie, --inplacebez którego mtp może chcieć skopiować nowy plik, a następnie zmienić jego nazwę na stary. Może to skutkować dwukrotnym skopiowaniem pliku na kartę SD: raz w celu przesłania mtp na kartę SD, a innym razem, ponieważ sterownik MTP może nie obsługiwać (mv), może (cp / rm) pod maską być bezpieczny .
  • czytaj man rsync dla opisu --verbose, --progress, --recursiveale są całkiem wymaga dokumentowania.
  • --omit-dir-times --no-perms są wymagane, ponieważ mtp tego nie obsługuje.
Evan Carroll
źródło
3
Dodaję następujące opcje --omit-dir-times --no-perms --ignore-existing. Rsync nie ustawia znaczników czasu katalogu przez MTP. Jestem prawie pewien, że „brak uprawnień” jest domyślny, ale lubię to określać. Ignorowanie istniejących plików pozwala na wybranie tam, gdzie zostało przerwane.
Stephen Ostermiller
4
Dlaczego --ignore-existing? To po prostu traci nadmiarowość. Zawsze możesz --size-onlyzmniejszyć synchronizację do listy katalogów, a nie sum kontrolnych. Dodam --omit-dir-timesi, --no-permsponieważ to brzmi użytecznie, i wydaje mi się, że pamiętam błąd na końcu na ten temat.
Evan Carroll,
Rsync ma problemy z ustawieniem dla mnie znaczników czasu przez MTP, więc bez --ignore-existingpróby synchronizacji wszystkich plików. Podoba mi się twoja --size-onlysugestia. Spróbuję zamiast tego następnym razem.
Stephen Ostermiller
3
Używam również wstawić ukośnik na miejscu docelowym, więc nie muszę używać gwiazdki na źródle:~/Videos/ ./
Stephen Ostermiller
Musiałem także dodać „--delete-after”, aby usunąć pliki, które już usunąłem z folderu muzycznego na komputerze. Zatem pełne polecenie to: rsync --verbose --progress --omit-dir-times --no-perms --recursive --inplace --ignore-istniejący --delete-after / home / user / MUSIC /.
happyskeptic
39

Korzystanie z sshelper

Znalazłem to rozwiązanie:

  • Zainstaluj sshelper na urządzeniu (nie wymaga rootowania , dostępne z Google Play Market)
  • W mojej sieci WLAN urządzenie nazywa się „android”. Ale możesz użyć adresu IP, jeśli nie możesz nadać urządzeniu nazwy hosta.

Edytuj lokalny ssh-config, aby zmienić domyślny port dla hosta „android”

.ssh/config
host android
    Port 2222
  • Uruchom sshelper na urządzeniu.
  • Podłącz urządzenie z Androidem do sieci WLAN.

rsync -rvlc Muzyka Android: SDCardLink /

Aktualizacja I preferują -rvlcdo -aponieważ można uzyskać wiele ostrzeżeń od ustawiania uprawnień oraz znaczniki czasu nie działa. Ta opcja -cznacznie przyspiesza drugą synchronizację.

I preferują -rvl --size-onlydo -aponieważ można uzyskać wiele ostrzeżeń od ustawiania uprawnień oraz znaczniki czasu nie działa. Ta opcja --size-onlyznacznie przyspiesza drugą synchronizację.

Niestety aplikacje muzyczne potrzebują trochę czasu, aby zobaczyć nowe pliki. Ponowne uruchomienie urządzenia pomaga.

guettli
źródło
13
Alternatywny sposób użycia rsync z SSHelper bez konieczności modyfikacji .ssh / config: rsync -avz -e 'ssh -p 2222' Music android:SDCardLink/( stackoverflow.com/a/4630407/399105 )
bmaupin 20.01.2014
1
@ guettli jaka opcja sumy kontrolnej -c do synchronizacji plików muzycznych? może to znacznie spowolnić
EdiD
5
@guettli z rsync man: -c, --checksum. Bez tej opcji rsync używa „szybkiej kontroli”, która (domyślnie) sprawdza, czy rozmiar każdego pliku i czas ostatniej modyfikacji są zgodne między nadawcą a odbiorcą. Ta opcja zmienia to, aby porównać 128-bitową sumę kontrolną dla każdego pliku o dopasowanym rozmiarze. Generowanie sumy kontrolnej oznacza, że ​​obie strony spędzą dużo dysku we / wy na odczyt wszystkich danych w plikach w transferze, co może znacznie spowolnić.
EdiD
4
@ guettli Myślę, że --size-onlybyłoby to najszybsze rozwiązanie. Nie jest to jednak tak bezpieczne, jak-c
niels,
2
Użyłem modemu USB i uzyskałem znacznie szybsze transfery. Następujące polecenie działało dla mnie po uruchomieniu SSHelp i pokazuje IP, 192.168.1.5które mogą być inne za każdym razem:rsync -avzhP --inplace --info=progress2 -e 'ssh -p 2222' 192.168.1.5:/storage/emulated/0/DCIM/Camera/ /home/username/path/to/pics/
Organiczny Uzależniony
3

Kopię zapasową rsync dla Androida można skonfigurować do synchronizacji w odwrotnej kolejności, czyli z hosta Linux na urządzenie z Androidem.

Za pomocą LlamaLab Automate można skonfigurować urządzenie z Androidem tak, aby automatycznie rsync działało w określonych warunkach, np .:

  1. o 5 rano
  2. gdy telefon jest podłączony do określonego Wi-Fi, oraz
  3. kiedy się ładuje.
Alexander Shcheblikin
źródło