.dmg Datei zu aktiviertem Volume finden

buridans_esel

buridans_esel

Aktives Mitglied
Thread Starter
Dabei seit
26.10.2005
Beiträge
135
Reaktionspunkte
13
Ich bastle an einem Skript, das bestimmte geöffnete Volumes auswirft und die zugehörigen Image-Dateien in den Papierkorb legt. (Szenario: mehrere .dmg-Images runtergeladen, ihre Volumes aktiviert, .app-Pakete rauskopiert, Images sollen weg). Filtern kann ich später, die vorläufige Version (s.u.) wirft einfach erstmal alle aktiven Images aus und legt die .dmgs in den Papierkorb.

Es funktioniert zwar, aber ist nicht sonderlich elegant (RegEx-Suche / Ersetzungen in der Ausgabe von hdiutil info). Kennt jemand eine Möglichkeit, zu einem aktiven (gemounteten) Volume in AppleScript die zugehörige Image-Datei aufzufinden?
Im Finder-Info-Fenster erscheint ja zu jedem Volume das Image, aus dem es aktiviert wurde. Aber an diese Information zu einem Volume komme ich in AppleScript nicht ran. Weder über die Eigenschaften der disk (im Finder-Vokabular), noch über info for (disk "VolumeName" as alias).

Unten mein code. Wie gesagt, ich würde gern ohne Shell-Befehle auskommen.
Code:
#--> Liste der .dmg-Dateien und ihrer aktivierten Volumes auslesen
set cmd to {"hdiutil info | grep -e 'image-path\\|/dev/.*/Volumes/' | ", ¬
	"sed -E s/'image.+: '//g | ", ¬
	"sed -E s='/dev/.+/Volumes/'==g"} as text

do shell script cmd
set dmg_volumes to splitBy(result, "\r") -- Zeilen trennen

(** die Liste hat folgende Struktur:
* /Users/username/Pfad/zur/dmg-Datei-1.dmg
* Volume-Name-1
* /Users/username/Pfad/zur/dmg-Datei-2.dmg
* Volume-Name-2
* ...
*)

tell application "Finder"
	set i to 0
	set l to length of dmg_volumes
	repeat while i < l and l > 1
		set i to i + 2
		# --> auswerfen und in den Papierkorb legen
		eject disk (item i of dmg_volumes)
		set dmg_file to POSIX file (item (i - 1) of dmg_volumes) as text
		move dmg_file to the trash
	end repeat
end tell

to splitBy(some_text, sep) --split text by separator
	set tid to text item delimiters
	set text item delimiters to sep
	set the_list to text items of some_text
	set text item delimiters to tid
	return the_list
end splitBy
 
Du wirst wahrscheinlich um hdiutil info nicht herumkommen. Zumindest mit fällt da nichts anderes ein, ich sehe da allerdings auch kein Problem. Du könntest das ganze theoretisch auch nur als Shellscript realisieren. Ich würde das ganze aber etwas kürzen:

Code:
[FONT="Verdana"][size=2][b]set[/b] [color=#3F7F00]pathToImages[/color] [b]to[/b] [b]every[/b] [color=#0000FF][i]paragraph[/i][/color] [b]of[/b] ([color=#0016B0][b]do shell script[/b][/color] "hdiutil info | egrep -o /.*dmg | uniq")
[b]set[/b] [color=#3F7F00]mountPoints[/color] [b]to[/b] [b]every[/b] [color=#0000FF][i]paragraph[/i][/color] [b]of[/b] ([color=#0016B0][b]do shell script[/b][/color] "hdiutil info | egrep -o /Volumes.*")

[b]repeat[/b] [b]with[/b] [color=#3F7F00]i[/color] [b]from[/b] 1 [b]to[/b] ([color=#0000FF][b]count[/b][/color] [b]of[/b] [color=#3F7F00]pathToImages[/color])
	[color=#4C4D4D]--.app rauskopieren:[/color]
	[color=#4C4D4D]--…[/color]
	[color=#4C4D4D]--auswerfen:[/color]
	[color=#0016B0][b]do shell script[/b][/color] "diskutil eject " & [color=#6C04D4]quoted form[/color] [b]of[/b] [color=#0000FF][i]item[/i][/color] [color=#3F7F00]i[/color] [b]of[/b] [color=#3F7F00]mountPoints[/color]
	[color=#4C4D4D]--löschen:[/color]
	[color=#0016B0][b]do shell script[/b][/color] "mv " & [color=#6C04D4]quoted form[/color] [b]of[/b] [color=#0000FF][i]item[/i][/color] [color=#3F7F00]i[/color] [b]of[/b] [color=#3F7F00]pathToImages[/color] & " ~/.Trash/"
[b]end[/b] [b]repeat[/b][/size][/FONT]
 
  • Gefällt mir
Reaktionen: buridans_esel
Danke, Pill!

egrep -o PATTERN | uniq – ist super elegant, wieder was dazu gelernt! Und auf every paragraph of hätte ich auch kommen müssen... naja, danke jedenfalls!

Dass ich das Ganze auch als shell script schreiben kann, ist mir klar (im Prinzip ist in Deinem Codebeispiel die repeat-Schleife das einzige wirkliche AppleScript-Konstrukt). Aber ich dachte eher an AppleScript, weil ich dann z.B. so Dinge machen kann wie "wirf das Image aus, dessen Volume im vordersten Finder-Fenster angezeigt wird".

P.S. noch eine noob-Frage: wie kriegt man AppleScript-Code hier im Forum so formatiert?
 
ich glaube, indem du das "php" tag anstelle "code" verwendest...

code:
Code:
set pathToImages to every paragraph of (do shell script "hdiutil info | egrep -o /.*dmg | uniq")

php:
PHP:
set pathToImages to every paragraph of (do shell script "hdiutil info | egrep -o /.*dmg | uniq")

EDIT: nein, da steckt mehr dahinter, kläre uns auf pill :)
 
Ich benutze den CodeFormatter 3.0 von fischer-bayern.de, den ich an dieses Forum etwas angepasst habe. Das Satimage wird bei dieser Version nicht mehr benötigt.
 
  • Gefällt mir
Reaktionen: chebfarid und buridans_esel
Hmm, schade eigentlich, dass man das offline selbst formatieren muss. Können nicht MU-Poweruser wie @Pill die Admins bitten, diese Funktionalität in den BBCode-Übersetzer hier im Forum einzubauen? Da gibt es sicher Plugins, wie z.B. das was hier verwendet wird...

EDIT: sorry, eigentlich off-topic. Ich habe das jetzt (wider jede Hoffnung) in einem Meta-Forum vorgeschlagen
 
Zuletzt bearbeitet:
Nuja, ich hab das Skript im Skriptmenü in der Menüleiste drin, dann geht das formatieren relativ schnell. Ob es Syntax Highlighting auch für Applescript gibt, weiss ich nicht. Macscripter.net hat etwas in diese Richtung, aber ob das mit diesem Forum kompatibel ist bezweifle ich.

Abgesehen davon glaube ich auch nicht, dass das hier implementiert wird, die haben hier andere Probleme ;)
 
Zurück
Oben Unten