Wie kann man Rsync dazu bringen, Alias-Dateien zu kopieren?

Systemspezifikationen: 2011 iMac, OS X Mountain Lion 10.8.4

Ich habe verstanden, dass Rsync Mac Alises nicht richtig handhabt, und habe jetzt entdeckt, dass Hunderte von Aliasen, die ich zuvor auf mein tragbares Laufwerk kopiert habe, aus diesem Grund tot und nutzlos sind.

Gibt es eine Möglichkeit, Rsync zu zwingen, mit Aliasnamen umzugehen? Wenn die Antwort ein definitives "Nein" ist, wie kann ich dann alle Aliase in einem Verzeichnis rekursiv in Symlinks konvertieren, damit sie von Rsync verarbeitet werden? Ich habe Hinweise auf ein Applescript gefunden, das dies anscheinend tun würde, aber die Site, auf der das Skript gehostet wird, ist schon lange tot und verschwunden.

Kennt jemand als letzten Ausweg etwas anderes als Rsync, das inkrementelle Backups ermöglichen und auch Aliase handhaben würde?

Anstatt die Antwort in die Frage aufzunehmen (was zukünftige Besucher verwirren könnte), posten Sie bitte die Lösung, die Sie gefunden haben, als Antwort unten.
Ah ok, ich hielt es für wahrscheinlicher, dass jemand die Frage sicher lesen und finden würde, anstatt zu hoffen, dass er zufällig alle Antworten liest und diese sieht. Aber sicher werde ich es hinzufügen.

Antworten (2)

Rsync kann den Inhalt von Alias-Dateien nicht einsehen, was für deren Konvertierung erforderlich wäre. Wenn Sie also möchten, dass Ihr Backup unverändert verwendet werden kann (ohne es auf dem ursprünglichen Laufwerk wiederherzustellen), müssen Sie die Aliase durch Symlinks ersetzen.

Auf MacOSXHints.com gibt es dafür eine Lösung . Es muss auf Ihrer Originalfestplatte ausgeführt werden (nicht auf dem Backup). Ich würde auch empfehlen, es zuerst in einigen Beispielverzeichnissen zu testen.

#!/bin/sh
if [ $# -eq 0 ]; then
    echo "Usage: alias2ln alias1 alias2 alias3..."
    echo "  where alias1, alias2, etc are alias files."
    echo "  Each alias file will be converted into a symlink."
fi

while [ $# -gt 0 ]; do
    if [ -f "$1" -a ! -L "$1" ]; then
        item_name=`basename "$1"`
        item_parent=`dirname "$1"`
        item_parent="`cd \"${item_parent}\" 2>/dev/null && pwd || echo \"${item_parent}\"`"
        item_path="${item_parent}/${item_name}"

        linksource=`osascript<<EOS
tell app "Finder"
set theItem to (POSIX file "${item_path}") as alias
if the kind of theItem is "alias" then
get the posix path of (original item of theItem as text)
end if
end tell
EOS`

        if [ $? -eq 0 ]; then
            if [ ! -z "$linksource" ]; then
                rm "$item_path"
                ln -s "${linksource}" "${item_path}"
                echo "\"${1}\" -> \"${linksource}\""
            fi
        fi
    fi
    shift
done

Laufen

  • Speichern Sie den obigen Code in einer Textdatei (z. B. alias2symlink)
  • ausführenchmod 755 alias2symlink
  • Wechseln Sie in den Ordner, in den Sie die Aliase konvertieren möchten
  • ausführen/path/to/alias2symlink alias1 alias2 ...
Ja, ich habe diesen Code schon früher gefunden, aber ich bin nicht versiert genug in AppleScript, um sicher zu sein, was es tut. Es schien eine ziemlich riskante Aktivität zu sein, es blind auszuführen, aber ich konnte ein Dummy-Verzeichnis zum Testen erstellen. Werde damit spielen und sehen wie es läuft.
Übrigens, dies ist das Skript, auf das ich mich in meiner Frage bezog, wo die Website des Eigentümers nicht mehr existiert. Dies ist anscheinend ein Shell-Skript - etwas, von dem ich wirklich nur etwas mehr als nichts weiß - und ich hatte gehofft, die von ihm erwähnte AppleScript-Version zu finden, aber ich hatte in dieser Abteilung keinen Erfolg. =(
Ich habe nachgeschlagen, wie man ein Shell-Skript ausführt, aber es scheint nicht zu funktionieren, egal was ich versuche. Alles was ich bekomme ist -bash: alias2ln.txt: command not found.Was mache ich falsch?
Antwort geändert. Das AppleScript ist tatsächlich im obigen Skript enthalten und wird nur benötigt, um das Ziel des Alias ​​zu lesen.
Ich fürchte, ich sehe nichts, was nicht da war, als ich Ihre Antwort zuletzt angesehen habe. Ich kann nicht herausfinden, wie ich dieses Skript ausführen soll. Und das darin enthaltene AppleScript scheint nur zu identifizieren, ob das Element ein Alias ​​ist, und den Pfad des ursprünglichen Elements abzurufen. Es macht nicht wirklich die Konvertierung. Gibt es dafür eine reine AppleScript-Lösung?
Schauen Sie sich das Ende der Antwort (nach dem Skript) an :-) Mir ist keine reine AppleScript-Lösung bekannt.
Das habe ich bereits getan, diese Bearbeitung war bereits vorhanden, als ich die Antwort sah. Ich glaube, ich habe es vor deiner Bearbeitung nie gesehen. Leider hilft es mir nichts zur Klärung. Ich erhalte einfach den zuvor erwähnten Fehler und das Skript wird nicht ausgeführt. Ich versuche, dies stattdessen an eine Automator-Routine anzupassen, aber bisher ist der AppleScript/Shell-Skriptteil nicht glücklich.

Als zukünftige Referenz habe ich einen einfachen Mac-Dienst gefunden, der Aliase perfekt in Symlinks umwandelt!

Diese Lösung umschließt das in der anderen Antwort erwähnte Skript tatsächlich als Automator-Aktion, um die Verwendung durch diejenigen zu erleichtern, die mit Terminal nicht vertraut sind.

Um den Dienst neu zu erstellen, verwenden Sie Automator, um einen Dienst zu erstellen, der ausgewählte Dateien und Ordner empfängt, wählen Sie die Aktion Shell-Skript ausführen aus und fügen Sie das Skript von Pastix in den Skriptbereich ein.

Vielleicht möchten Sie die Lösung zusammenfassen und vielleicht sogar das Skript für zukünftige Benutzer posten, die nach dieser Antwort suchen. das Original kann verschwinden.