Zip entpacken ohne ordnerstruktur in neuen ordner mit dem namen des zip

A

alex106

Registriert
Thread Starter
Dabei seit
11.01.2014
Beiträge
1
Reaktionspunkte
0
Hallo,

Vielleicht kann hier jemand helfen. Ich habe hunderte zip-dateien mit bildern die in verschiedene ordner liegen. Ich möchte jetzt per script einen ordner mit dem namen des zip erstellen und die bilder ohne ordnerstruktur in diesen ordner entpacken.

Das ordner erstellen funktioniert. nur das entpacken will nicht. Bei do shell script scheint etwas zu fehlen.


on run
try
tell application "Finder"
set selitems to selection as list
end tell
if selitems is {} then
error "Sie haben keine Finderobjekte ausgewählt."
else if length of selitems > 1 then
error "Sie haben mehr als ein Finderobjekt ausgewählt."
end if
set selitem to item 1 of selitems
set iteminfo to info for ((selitem as Unicode text) as alias)
if folder of iteminfo then
error "Das ausgewählte Finderobjekt ist ein Ordner"
end if
set filename to name of iteminfo
log filename
set dotoffset to offset of "." in filename
log dotoffset
set foldername to ((characters 1 through (dotoffset - 1) of filename) as Unicode text)
log foldername
tell application "Finder"
if not (exists folder foldername in (container of selitem)) then
make new folder in (container of selitem) with properties {name:foldername}
end if

end tell

do shell script "unzip -j " & (filename)

on error errmsg number errnum
tell me
activate
display dialog "Ein Fehler ist aufgetreten:" & return & return & errmsg & return & "(" & errnum & ")" buttons {"OK"} default button 1 with icon stop
end tell
end try
end run

 
Gibt es Fehlermeldungen?
Was passiert, wenn Du "unzip -j <dateiname>" im Terminal ausführst?

Gruß
maceis
 
Du übergibst unzip nur den Dateinamen, nicht den ganzen Pfad. Wenn die Datei dann nicht im aktuellen Verzeichnis liegt, findet unzip nichts. Außerdem musst du unzip noch sagen, in welchen Ordner entpackt werden soll. Damit sparst du dir auch das erstellen des Ordners.

Insgesamt könnte dein Skript so aussehen:

Code:
[B]on [/B][COLOR=#0433FF][FONT=Verdana][B]run
[/B][/FONT][/COLOR][FONT=Verdana]    [B]try[/B][/FONT]
[FONT=Verdana]        [B]tell[/B] [COLOR=#0433ff][I]application[/I][/COLOR] "Finder"[/FONT]
[FONT=Verdana]            [B]set[/B] [COLOR=#4f8f00]selitems[/COLOR] [B]to[/B] [COLOR=#812fdc]selection[/COLOR] [B]as[/B] [COLOR=#0433ff][I]list[/I][/COLOR][/FONT]
[FONT=Verdana]        [B]end[/B] [B]tell[/B][/FONT]
[FONT=Verdana]        [B]if[/B] [COLOR=#4f8f00]selitems[/COLOR] [B]is[/B] {} [B]then[/B][/FONT]
[FONT=Verdana]            [B]error[/B] "Sie haben keine Finderobjekte ausgewählt."[/FONT]
[FONT=Verdana]        [B]else[/B] [B]if[/B] [COLOR=#812fdc]length[/COLOR] [B]of[/B] [COLOR=#4f8f00]selitems[/COLOR] > 1 [B]then[/B][/FONT]
[FONT=Verdana]            [B]error[/B] "Sie haben mehr als ein Finderobjekt ausgewählt."[/FONT]
[FONT=Verdana]        [B]else[/B] [B]if[/B] [COLOR=#5730be]name extension[/COLOR] [B]of[/B] [COLOR=#0433ff][I]item[/I][/COLOR] 1 [B]of[/B] [COLOR=#4f8f00]selitems[/COLOR] [B]is[/B] [B]not[/B] "zip" [B]then[/B][/FONT]
[FONT=Verdana]            [B]error[/B] "Sie haben keine Zip-Datei ausgewählt."[/FONT]
[FONT=Verdana]        [B]end[/B] [B]if[/B][/FONT]
[FONT=Verdana]        [B]set[/B] [COLOR=#4f8f00]selitem[/COLOR] [B]to[/B] [COLOR=#0433ff][I]item[/I][/COLOR] 1 [B]of[/B] [COLOR=#4f8f00]selitems[/COLOR][/FONT]
[COLOR=#942193][FONT=Menlo]        [/FONT][/COLOR]
[FONT=Verdana]        [COLOR=#012fbe][B]do shell script[/B][/COLOR] "unzip -j " & [COLOR=#812fdc]quoted form[/COLOR] [B]of[/B] [COLOR=#812fdc]POSIX path[/COLOR] [B]of[/B] ([COLOR=#4f8f00]selitem[/COLOR] [B]as[/B] [COLOR=#0433ff][I]alias[/I][/COLOR]) & " -d " & [COLOR=#812fdc]quoted form[/COLOR] [B]of[/B] ([COLOR=#0433ff][I]items[/I][/COLOR] 1 [B]thru[/B] -5 [B]of[/B] [COLOR=#812fdc]POSIX path[/COLOR] [B]of[/B] ([COLOR=#4f8f00]selitem[/COLOR] [B]as[/B] [COLOR=#0433ff][I]alias[/I][/COLOR]) [B]as[/B] [COLOR=#0433ff][I]string[/I][/COLOR])[/FONT]
[COLOR=#942193][FONT=Menlo]        [/FONT][/COLOR]
[FONT=Verdana]    [B]on[/B] [B]error[/B] [COLOR=#4f8f00]errmsg[/COLOR] [COLOR=#0433ff]number[/COLOR] [COLOR=#4f8f00]errnum[/COLOR][/FONT]
[FONT=Verdana]        [B]tell[/B] [B]me[/B][/FONT]
[COLOR=#0433FF][FONT=Verdana][COLOR=#000000]            [/COLOR][B]activate[/B][/FONT][/COLOR]
[FONT=Verdana]            [COLOR=#012fbe][B]display dialog[/B][/COLOR] "Ein Fehler ist aufgetreten:" & [COLOR=#812fdc]return[/COLOR] & [COLOR=#812fdc]return[/COLOR] & [COLOR=#4f8f00]errmsg[/COLOR] & [COLOR=#812fdc]return[/COLOR] & "(" & [COLOR=#4f8f00]errnum[/COLOR] & ")" [COLOR=#012fbe]buttons[/COLOR] {"OK"} [COLOR=#012fbe]default button[/COLOR] 1 [COLOR=#012fbe]with icon[/COLOR] [COLOR=#5730be][I]stop[/I][/COLOR][/FONT]
[FONT=Verdana]        [B]end[/B] [B]tell[/B][/FONT]
[FONT=Verdana]    [B]end[/B] [B]try[/B][/FONT]
[B]end [/B][COLOR=#0433FF][FONT=Verdana][B]run[/B][/FONT][/COLOR]

Eventuell musst du dir noch überlegen, was passieren soll, wenn es 2 Dateien mit demselben Namen gibt.
 
Eventuell musst du dir noch überlegen, was passieren soll, wenn es 2 Dateien mit demselben Namen gibt.

Ich bin davon ausgegangen, dass dieser Fall nicht eintreten kann / vorgesehen ist.
Sonst erzeugt unzip nämlich einen Dialog
Code:
replace [I]dateiname[/I]? [y]es, [n]o, [A]ll, [N]one, [r]ename:


Ob es eine gute Idee ist, um einen Shellbefehl herum ein Applescript zu schreiben, sollte man m. E. hinterfragen.
Ich mach das nur, wenn ich die Ergebnisse mit Applescript weiterverarbeiten möchte / muss.

Gruß
maceis
 
Zurück
Oben Unten