Alias - Ziel mit Terminal finden

maceis

maceis

Aktives Mitglied
Thread Starter
Dabei seit
24.09.2003
Beiträge
16.880
Reaktionspunkte
626
Hallo zusammen,

gibt es eine Möglichkeit das Ziel eines Alias auf der Kommandozeile irgendwie auszulesen ?

Mit GetFileInfo kann man zwar erkennen, ob eine Datei ein Macintosh Alias ist, aber ich habe noch keine Möglichkeit gefunden, wie man herausfinden kann, wo das original liegt.

Falls es mit dem Terminal nicht geht: geht es mit Apple Script (oder besser mit "osascript") ?
 
Hallo Maceis,

soweit ich mich erinnern kann, verwendet OS X im Gegensatz zu Windows nicht den konkreten Pfad, da so ein Alias ja nur solange funktionieren würde, bis die Datei, auf die sich das Alias bezieht, verschoben wird (Windows-User kennen das ja zur genüge, dass Verknüpfungen nicht mehr funktionieren, weil die Datei verschoben/umbenannt wurde).

Deshalb wird das beim Mac OS X irgendwie (und hier hört mein Halbwissen auch auf), über ne direkte Referenz zur Datei gemacht. Das ist dann unabhängig vom tatsächlichen Pfad der Datei und das Alias funktioniert auch, wenn die Datei umbenannt/gelöscht wird. Deshalb vermute ich, kannst Du Dir bei einem Alias auch nicht den Pfad der verknüpften Datei anzeigen lassen, da dem Alias der Pfad wurscht ist.

Aber vielleicht irre ich mich da auch. ;)
 
maceis schrieb:
gibt es eine Möglichkeit das Ziel eines Alias auf der Kommandozeile irgendwie auszulesen ?

Sitze gerade nicht am Mac, kann es daher nicht testen:

Was zeigt ein

ls -la

an, wenn du es zum Beispiel im Desktop-Pfad anwendest und auf deinem Schreibtisch ein Alias liegt?

Theoretisch müsste doch etwas in der Art auftauchen

Datei -> /Pfad/Originaldatei

ad
 
ctrl + Mausklick auf das Alias. Dann im Kontextmenü "Information" auswählen. Und dort wird Dir dann angezeigt, wo das Original liegt. Habe ich selber gerade bemerkt. Man lernt eben nie aus. :D
 
Ein Alias wird im Terminal nicht als Link erkannt, da er auf einer anderen Struktur aufbaut als ein "normaler" Unix Link.
In Apples Filestruktur bekommt jede Datei eine Nummer und wird von Mac OS auch als Nummer referenziert. Die Terminal Programme allerdings verwenden Unix typisch die Dateinamen als Referenz. Es sind also zwei völlig unterschiedliche Ansätze. Von daher bin ich immer wieder verwundert, wie es Apple geschafft hat, zwei so unterschiedliche Dinge und einen Hut zu bringen. Deshalb siehst Du im Finder den typischen Verzeichnisbaum des Filesystems auch nicht. Also im Terminal wirst Du wahrscheinlich kein Glück haben...
 
Hallo zusammen,

mit AppleScript ist das ganz einfach (wie immer :) )
Code:
set myAlias to "VOLUMENAME:Users:username:Desktop:ALIASTEST:testAlias"

tell application "Finder"
	set myLocation to get original item of alias file myAlias
end tell
(ALIASTEST wird natuerlich zusammengeschrieben, k.a. wieso das auseinandergezogen wird)

Ausgabe etwa:
document file "demo4.jpg" of folder "Desktop" of folder "username" of folder "Users" of startup disk of application "Finder"

anstatt 'set myAlias to "VOLUMENAME:..." geht auch

Code:
set myAlias to file "testAlias" of folder "Desktop" of folder "Users" of  
volume "bla" of application "Finder""
(alles eine zeile)

Ich habe leider auch keine Ahnung wo sich OS X die Referenzen vom Alias zur Datei merkt, ich hatte erst Finder.plist im Verdacht, scheine mich aber zu täuschen, auch wenn da eine Menge von Aliases drinsteht.

Habe noch so ein bischen 'NAVServices' und 'HIToolbox' im Verdacht, weiss es aber nicht. Müsste eigentlich (wenn in Dateiform) dann auf Userebene zu finden sein.

Vielleicht hilft es in entsprechenden Caches / Plists ein bischen nach der INode nummer der Referenzdatei zu greppen.


gruesse,
sbx
 
hallo zusammen,
@ starbuxx,

vielen Dank für Deine Tips.
Das klingt schon mal sehr vielversprechend.
Jetzt muss ich versuchen das ganze in ein Shellskript zu packen.
Mal sehen, ob mir das gelingt.

Wo die Alias Informationen hinterlegt sind ist mir auch ein Rätsel.
Ich hab mal gelesen, das nicht nur die Inode Nummer gespeichert wird (wenn überhaupt) sondern eine Reihe von Metainformationen, die weit über die Informationen hinausgehen, die in einem Hardlink gespeichert sind.
Muss ja auch so sein, bei dem was Aliasse alles können.

@ ad:
nein, so sieht es bei einem symlink aus; ein Mac Alias ist aber etwas völlig anderes und weit leistungsfähiger als ein symlink (der ja nur auf die Pfadangabe aufbaut)
Ein Alias findet zB in der Regel die Zieldatei auch noch, nachdem sie verschoben und/oder umbenannt wurde
[edit]....
 
Zuletzt bearbeitet:
sgmelin schrieb:
Ein Alias wird im Terminal nicht als Link erkannt, da er auf einer anderen Struktur aufbaut als ein "normaler" Unix Link.
In Apples Filestruktur bekommt jede Datei eine Nummer und wird von Mac OS auch als Nummer referenziert. Die Terminal Programme allerdings verwenden Unix typisch die Dateinamen als Referenz. Es sind also zwei völlig unterschiedliche Ansätze. Von daher bin ich immer wieder verwundert, wie es Apple geschafft hat, zwei so unterschiedliche Dinge und einen Hut zu bringen. Deshalb siehst Du im Finder den typischen Verzeichnisbaum des Filesystems auch nicht. Also im Terminal wirst Du wahrscheinlich kein Glück haben...

Vielen Dank für Deine Mühe.

Auch Unix arbeitet mit Inodes (so heissen die Nummern) und zwar schon lange, bevor es den ersten Mac überhaupt gab. Mit hardlinks kann man auch im Terminal ein und derselbe Datei unterschiedliche Namen geben; das hat aber nichts mit Macintosh Aliassen zu tun.
Den kompletten Verzeichnisbaum sieht man im Finder nicht, weil Apple den bewusst vor den usern versteckt hat.
Das lässt sich durch Änderung der Datei/.hidden aber leicht ändern.
All diese Dinge helfen mir aber leider bei der Lösung des Problems nicht wirklich weiter.

@Korgan

auch Dir vielen Dank.
Das wusste ich aber bereits.
Mir geht es aber darum, in einem Skript die Zieldatei eines Alias zu finden.
P.S. Wenn eine Ziel gelöscht wird, funktioniert der Alias natürlich nicht mehr.
 
Inodes und die Filenummern in MacOS sind was komplett verschiedenes. Ein Inode ist ein 32 kB grosser Block im Filesystem, welcher entweder Daten, Adressen von weiteren Inodes oder beides haben kann. Das ist ein grosses Problem in Original Unix Filesystemen. Denn wenn man viele kleine Dateien hat, dann hat man nicht genug Inodes um alle Files zu adressieren, und die Platte wird als voll gekennzeichnet, obwohl vom freien Platz her noch genug Platz da ist. Entscheidet man sich bei der Formatierung der Platte allerdings für mehr Inodes, verschenkt man u.U. Platz für Inodes, der eigentlicht besser für Nutzdaten zu gebrauchen wäre. Eine Zwickmühle ;)
Die Nummern im HFS(+) bezeichnen eine File-ID. Diese Nummer wird auch nur einmal vergeben. Selbst wenn das File gelöscht wird, wird die Nummer nicht mehr vergeben. Wenn ein Inode als frei markiert wird, wird er wieder überschrieben.
 
Danke für die Info sgmelin,

hab ich wieder mal was gelernt hier ;)
Das mit den Inodes kenn ich schon, aber das mit den Mac File-ID´s ist mir neu.
 
starbuxx schrieb:
Ich habe leider auch keine Ahnung wo sich OS X die Referenzen vom Alias zur Datei merkt
In der alis-Resource des Alias steht der komplette Pfad, der Alias-Manager ändert den, sobald das Original verschoben wird.

sgmelin schrieb:
Die Nummern im HFS(+) bezeichnen eine File-ID. Diese Nummer wird auch nur einmal vergeben. Selbst wenn das File gelöscht wird, wird die Nummer nicht mehr vergeben.
Es sei denn, eine bestimmte Zahl wird überschritten. Dann wird ein spezielles Bit im Volume-Header gesetzt und alte Nummern werden wieder verwendet.
 
Zuletzt bearbeitet von einem Moderator:
@._ut: gut zu wissen.

Mit
Code:
cat -v Desktop/myAlias/..namedfork/rsrc
kommt man an den Inhalt des Resource Forks.

Dan muss man noch den Pfad/Dateinamen rauszuholen. Evtl. wäre es eine Möglichkeit die unter /Volumes zu findenden Volumenamen zu benutzen, und sich so den Pfad zu suchen. Dummerweise findet man die Referenzdatei so nicht, wenn sie auf einem gerade nicht gemounteten Volume liegt.

Vielleicht denke ich da morgen nochmal drüber nach.

Gute Nacht,
sbx
 
spontante idee:

vielleicht ist es schlauer, das mit Python oder so zu machen. Da gibts hochsprachige Elemente um das hinzubekommen. Die Shell muss man da schon ganz schön quälen.

@maceis: was hast du denn genau vor? erzähl doch mal, dann kann man besser mitdenken. :)
 
starbuxx schrieb:
....
Mit
Code:
cat -v Desktop/myAlias/..namedfork/rsrc
kommt man an den Inhalt des Resource Forks.
...
Cool, Da steckt schon mal der Pfad drin (in Classic-Manier mit Doppelpunkten).
Mit ein wenig filtern sollte man da klar kommen.
Python kann ich nicht wirklich, mit perl müsste das auch gehen (aber auch mit Shellkommandos).

Es gibt aber einige Problem.
Wenn man die Zieldatei umbenennt oder verschiebt, wird Mac OS (X) das Ziel trotzdem noch finden. Der Pfad in der rsrc wird aber erstmal nicht geändert.
Noch haariger wird es, wenn man das Alias auf eine anderes Volume verschiebt; dann wird das ganze sehr unübersichtlich.
Fazit: Solange man das Alias nicht verschiebt und das Orginal nicht umbenennt oder verschiebt hat man vielleicht noch ne Chance; sonst wird es mindestens sehr kompliziert.

Was ich vorhabe ?
Na ja; eigentlich it das mehr aus allgemeinem Interesse.
Hab in nem anderen Forum die Frage gelesen, ob man alle Mac Aliasse in Unix-Links umwandeln kann. (Fragt mich nicht, wozu das gut sein soll; Ich weiß es nicht)
Hat mich irgendwie gereizt.
hardlinks scheinden schon mal aus (eben wegen der Inode-Geschichte und weil man kein hardlinks von Verzeichnissen erstellen kann), aber symlinks könnten (mit Einschränkungen) funktionieren, dachte ich mir. Man verliert halt einige (gute) Eigenschaften der Aliasse.
Mit "GetFileInfo" kann man sie finden, braucht man noch die Zieldatei. Aber da fängt der Schlamassel an ;)

Danke Euch allen; hab´ mit Eurer Hilfe Einiges gelernt.
 
maceis schrieb:
Wenn man die Zieldatei umbenennt oder verschiebt, wird Mac OS (X) das Ziel trotzdem noch finden. Der Pfad in der rsrc wird aber erstmal nicht geändert.
Nicht sofort, aber spätestens, sobald auf die rsrc zugegriffen wird. Wenn man z.B. die alis-Resource eines Alias, dessen Original man kurz vorher verschoben hat, in Resourcerer öffnet, dann meldet sich der Alias-Manager, dass er die Resource noch ändern möchte, bevor sie geöffnet wird.
 
._ut schrieb:
Nicht sofort, aber spätestens, sobald auf die rsrc zugegriffen wird. Wenn man z.B. die alis-Resource eines Alias, dessen Original man kurz vorher verschoben hat, in Resourcerer öffnet, dann meldet sich der Alias-Manager, dass er die Resource noch ändern möchte, bevor sie geöffnet wird.

Kann das vielleicht eine Funktion von Resourcerer sein ?
Ich habe ein wenig rumprobiert, und Zieldateien verschoben, ohne das deswegen der Pfad in der rsrc angepasst wurde; weder vor noch nach einem Zugriff.
Wie das genau funktioniert, weiß ich es aber nicht. Darum hab ich oben auch ganz vorsichtig "erstmal" gesagt ;)
 
hi maceis,

bin grad über was gestolpert: ich glaube, was du suchst sind die Tools 'Rez' und 'DeRez' aus den Developer Tools.

Damit lassen sich in der Shell Resourceforks extrahieren, compilen und auch direkt ändern.

man pages:
DeRez Rez

grüsse,
sbx
 
Zuletzt bearbeitet:
Zurück
Oben Unten