Kopiere Dateien von einem Mac auf einen andern Mac

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Kopiere Dateien von einem Mac auf einen andern Mac

    Hallo,

    ich habe zwei OS X Apps die unterschiedliche Aufgaben lösen. Die eine erzeugt CSV-Dateien und die andere benutzt diese um seine Aufgabe lösen zu können.

    Aktuell nutze ich einen USB-Stick um die CSV-Dateien von einem MacBook zum anderen zu tragen.

    MacBook-A -- "~/Source/Tiger/Data-1/" --> USB-Stick --> MacBook-B --> "~/Documents/Tiger/Data-1/"

    Ich möchte jetzt nicht mehr so viel laufen und will den USB-Stick durch WLAN ersetzen.

    Bei meine Recherche habe ich
    • NSURLConnection, NSURLRequest, NSURLSession, ...
    und
    • NSFileManager
    kennen gelernt mit dem Files und ganze Ordner kopiert werden können.

    Allerdings habe ich bisher nur Anwendungen für NSURLXxxx gefunden die mit HTML-Files auf einen Webserver hochladen.

    Der NSFileManager kann "nur" auf dem lokalen Filesystem arbeiten!?

    Das möchte ich erreichen: (beide MacBooks befinden sich im gleichen Netzwerk, ohne Internetzugang)
    MacBook-A -- "~/Source/Tiger/Data-1/" --> WLAN --> MacBook-B --> "~/Documents/Tiger/Data-1/"

    Wie kann ich NSURLXxxx einsetzten um ganze Folder und alle darin enthaltenen Files von einem Mac auf einen anderen über das Netzwerk zu kopieren?
    Wenn Du immer nur das tust was du schon kannst - wirst du immer das bleiben, was du heute bist.
  • Ich hab einen ähnlichen Fall. Server hat Daten für die Clients.
    Habe es zuerst mit mounten von einem Verzeichnis auf dem Server gemacht. Das hat zu Abbrüchen usw. geführt.
    Jetzt läuft auf dem Server ein Bonjourservice. Die Clients holen sich bei Bedarf was sie brauchen.

    Chris
    Man macht einfach solange irgendwelche Dinge, bis man tot ist.
    Und dann bekommen die anderen Kuchen.
  • du kannst auf dem empfänger-rechner oder dem sender-rechner einen eigenen dienst bauen der das zeugs annimmt bzw sendet oder einfach etwas verwenden das es schon gibt. sb kannst du die files per scp, rsynch oder was auch immmer über ssh rüberschieben.
    du kannst aber auch einfach eine ftp-freigabe einrichten oder eben sonstwas. zugriffsrechte natürlich beachten etc...
  • uschu.do schrieb:

    Bonjour hört sich gut an, nur wie werden die Files übertragen?

    Zum Beispiel ein 30k grosses CSV als UTF8?
    bonjour wird im prinzip nur verwendet um den angebotenen dienst auch zu entdecken (also ohne IP, hostname oder sonstwas manuell einzugeben). Das ist aber auch ein Einzeiler. Den dienst selbst zu erstellen ist schon etwas mehr arbeit, aber auch nichts unmögliches.
  • Bonjour kenne und verwende ich schon. Mit NSStreams übertrage ich dann (ganz) winzige Datenmengen - so um die 100 Byte.

    Meine CSVs sind da schon grösser und Segmentierung aus Layer 7 kommt damit ins Spiel.

    Für das übermitteln der Files möchte ich kein eigenes Protokoll entwickeln (und testen) müssen. Deshalb suche ich nach Build-In Mechanismen (NSURLRequest, NSFileManager oder ähnliches) um die Files zu kopieren.

    Die scp oder rsync erfordern NSTask?
    Wenn Du immer nur das tust was du schon kannst - wirst du immer das bleiben, was du heute bist.
  • uschu.do schrieb:

    Bonjour kenne und verwende ich schon. Mit NSStreams übertrage ich dann (ganz) winzige Datenmengen - so um die 100 Byte.

    Meine CSVs sind da schon grösser und Segmentierung aus Layer 7 kommt damit ins Spiel.

    Für das übermitteln der Files möchte ich kein eigenes Protokoll entwickeln (und testen) müssen. Deshalb suche ich nach Build-In Mechanismen (NSURLRequest, NSFileManager oder ähnliches) um die Files zu kopieren.

    Die scp oder rsync erfordern NSTask?
    wenn du mit NSStreams, sockets oder was auch immer arbeitest bist du aber auf Layer 4 und nicht 7. wenn es segmentierungsprobleme im layer 7 gibt dann ist wohl der creator aus layer 8 dran schuld ;)
    wo genau liegt das problem größere daten über NSSocket und co zu verschicken?
    NSURLRequest und co implementieren nicht die dienste, genauso NSFileManager und co.
  • Layer 8 steckt, mit zeitlichem Abstand, zwei je 50 byte lange Bytewürste in den NSOutputStream auf dem Mac.

    Aus dem NSInputStream auf dem iPod kommt das als 100 Byte lange Wurst wieder heraus.

    Oder es wird eine ca. 1k lange Bytewurst in den NSOutputStream gedeckt und diese kommt mit unterschiedlich langen Teilen aus dem iPod NSInputStream wieder heraus.

    Damit erscheint es so, als ob zwischen stream.write(..) und NSStreamHasBytesAvailable die Bytewurst 'optimiert' wird. Auf welcher Ebene das passiert weiss ich nicht.
    Wenn Du immer nur das tust was du schon kannst - wirst du immer das bleiben, was du heute bist.
  • achso meinst du das. das ist doch egal. kannst du ja zusammenbauen beim empfänger. um am empfänger zu wissen wie viel daten zu einem file gehören kannst du ja einen kleinen header zu anfang schicken der die länge enthällt (byteorder beachten) und am besten den header erweiterbar machen sodass du später noch weitere infos da reinpacken kannst.
  • uschu.do schrieb:

    Bonjour kenne und verwende ich schon. Mit NSStreams übertrage ich dann (ganz) winzige Datenmengen - so um die 100 Byte.
    Dann hast du doch schon alles. Ob du da 100 Byte oder 100 MB reinsteckst ist doch egal.
    Ich übertrage Bilder und Filme auf MacBooks und mittlerweile auch auf iPads. Die Bilder- und Filmliste steckt im TXTRecord von Bonjour. Filename und Hash. Wenn der Client ins Netz kommt wird ihm die Liste geliefert und er entscheidet ob und was er braucht.
    Die Übertragung erfolgt in 32k Blöcken. Erst die Blockgröße und dann der Block. Zum Schluß gibts noch ne Checksumme.
    Ist im Prinzip alles im genannten Sample.
    Es gibt mittlerweile auch einen Windowsclient, da habe ich aber nix mit zu tun.

    Chris
    Man macht einfach solange irgendwelche Dinge, bis man tot ist.
    Und dann bekommen die anderen Kuchen.
  • Hallo,
    ich habe etwas mit "rsync" experimentiert. Rsync will ich ausschliesslich im lokalen Netzwerk ausführen. Geplant habe ich das rsync mit NSTask aus meiner OS X App auszuführen. Einige Recherche im Netz haben mit diese Lösung vorgeschlagen, damit es ohne Passwort abfrage funktioniert:

    rsync -e "ssh -o UserKnownHostsFile=/dev/null,StrictHostKeyChecking=no wettkrampf@192.168.xxx.xxx" -av ~/Projekte/Technical/ wettkrampf@192.168.xxx.xxx:~/

    allerdings antwortet mit die Shell:

    The authenticity of host '192.168.xxx.xxx (192.168.xxx.xxx)' can't be established.
    ECDSA key fingerprint is SHA256:sfm ... NGU.
    Are you sure you want to continue connecting (yes/no)?

    Habe ich eine Option vergessen?
    Was muss ich tun, damit das rsync ohne Passwortabfrage funktioniert?

    Danke.
    Wenn Du immer nur das tust was du schon kannst - wirst du immer das bleiben, was du heute bist.