OS X El Capitan Automator Input mehrere Dateien: Übergabe an AS mit Do Shell Script

tiftich

tiftich

Mitglied
Thread Starter
Dabei seit
23.01.2019
Beiträge
68
Reaktionspunkte
5
Hallo, liebe MacUser,

zu meinem Thema habe ich zwei Screenshots, die das Problem schnell erkennen lassen. Im Prinzip geht es um ein simples Do Shell Script für chmod, dessen Input von einem Automator-Dienst kommen soll.
Ich bin gar kein Unix-Experte, deswegen komme ich wohl mit der korrekten Pfad-Referenzierung nicht klar.
Im ersten Screenshot klappt es: wenn EINE Datei verarbeitet werden soll.
Im zweiten Screen klappt es nicht: wenn MEHRERE Dateien verarbeitet werden sollen.
Es hat sicherlich mit der korrekten Pfadangabe (quoted form of the POSIX path) zu tun, und Unix-Experten schlagen wahrscheinlich die Hände über dem Kopf zusammen, aber vielleicht ist es ja nur eine Kleinigkeit, die klemmt. Für Hilfe oder Korrekturen wäre ich sehr dankbar - ich brauche dieses Script dringend - und eben als Automator-Service.

Vielen Dank im Voraus!

input 1 file.jpg


input 2 files.jpg
 
probier mal
Code:
repeat with objectRef in input
    do shell script "chown sg " & quoted form of POSIX path of objectRef with administrator privileges
end repeat
 
OMG!
das war's! wie soll er auch sonst die dateiliste abarbeiten. oneOeight, Du bist mein held des tages!
Toll, dass es dieses Forum gibt und ich nicht schon früher hier gelandet bin - obwohl ich seit Mac OS 5 dabei bin.
Als DTP und Logic-Spezialist tauge ich vielleicht was, aber Unix. Entsprechende Gegendienste gerne, wenn mir möglich!
 
oneOeight, jetzt traue ich mich noch mal…

Du hast mir schon sehr geholfen, jetzt spinne ich das ganze noch weiter, sorry…
Der Dienst läuft ganz prima, ich habe ein -R ergänzt, um auch alle Inhalte aller gedroppten Ordner einzubeziehen. Was perfekt wäre, wenn er sich dabei auf alle enthaltenen Ordner beschränken würde. Wenn ich in die repeat-Schleife noch eine if-Schleife mit Abfrage nach package folder etc. einziehe, geht es wieder nicht, mache ich vielleicht auch nur falsch. hast Du eine Idee…? Hoffentlich gehe ich Dir nicht auf den Geist…

Momentaner Automatordienst (neu mit -R, "empfängt nur Ordner" funktioniert leider nicht):

on run {input, parameters}
repeat with objectRef in input
do shell script "chow sg -R " & quoted form of the POSIX path of objectRef with administrator privileges
end repeat
return input
end run
 
naja, du könntest dir halt aus dem pfad nur den ordner extrahieren.
aber dann auch dran denken eine datei aus dem entsprechenden ordner drauf zu droppen.
Code:
do shell script "chown -R sg `dirname " & quoted form of the POSIX path of objectRef & "`" with administrator privileges
hab es jetzt nicht ausprobiert, wie gut es klappt.
so was in der art oder halt über applescript.

edit: chown -R korrigiert.
 
Zuletzt bearbeitet:
hallo oneOeight,
schade, klappt nicht. Ziel war es, viele Ordner mit dem Service zu verarbeiten und dabei rekursiv ausschließlich alle Ordner zu verarbeiten. Beim Draufziehen gehe ich also in keinen der Ordner rein, sondern wähle nur die obersten und das Script arbeitet sich durch.
Naja, egal… man kann nicht ales haben. Aber vielen Dank für Deine Mühe!

screen.jpg
 
-R arbeitet sich doch schon durch alle unterordner. ihr müsst das halt richtig stellen -> chown -R user blabla
 
schade, klappt nicht. Ziel war es, viele Ordner mit dem Service zu verarbeiten und dabei rekursiv ausschließlich alle Ordner zu verarbeiten. Beim Draufziehen gehe ich also in keinen der Ordner rein, sondern wähle nur die obersten und das Script arbeitet sich durch.

du hast es auch nicht korrekt kopiert…
das mit
Code:
& "`"
darfst du nicht einfach weg lassen.
daraus wird dann nacher
Code:
`dirname /pfad/zu/datei`
und sorgt dafür, dass dirname ausgeführt wird und dann /pfad/zu/ ausspuckt.
 
oneOeight, so benutze ich es jetzt. Aber es arbeitet immer noch alle Dateien ab - nicht nur die Ordner. Anders gesagt: ich will nur den Eigentümer aller enthaltenenen Ordner ändern. Was muss ich machen, damit das funktioniert?
Sorry für die Mühe…

screen.jpg
 
Zuletzt bearbeitet:
wenn du nur ordner, und auch in unterordnern keine dateien behandeln willst:
Code:
find oberster-ordner -type d -exec chown sg {} \;
 
wenn es nur die ordner sein sollen, dann vielleicht eher so:
Code:
do shell script "find `dirname " & quoted form of the POSIX path of objectRef & "` -type d -exec chown -R sg {} \;" with administrator privileges
 
-R muss wieder raus.
 
ob mit oder ohne -R, was ist mit dem Semikolon?

screen.jpg
 
musst du doppelescapen, wegen applescript -> \\;
 
Olivetti, Du bisset!
So läuft es jetzt wie ein Träumchen (ohne -R):

on run {input, parameters}

repeat with objectRef in input
do shell script "find `dirname " & quoted form of the POSIX path of objectRef & "` -type d -exec chown sg {} \\;" with administrator privileges
end repeat

return input
end run

oneOeight und Olivetti,
vielen lieben Dank für Euren Input. Man kann immer wieder was lernen. Heute von Euch…
 
EDIT:
äääh… doch nicht ganz…
habe gerade festgestellt, dass folgendes passiert: selektiere ich ordner 1, ordner 2, ordner 3 und wende den Dienst an, wird der übergeordnete Ordner "test" leider mit verarbeitet. Das kann unschöne Folgen haben, z.B. wenn der übergeordnete Ordner nicht Teil der Operation sein soll (z.B. der Schreibtisch).

screen.jpg

ich bin eine Plage,was?
 
habe gerade festgestellt, dass folgendes passiert: selektiere ich ordner 1, ordner 2, ordner 3 und wende den Dienst an, wird der übergeordnete Ordner "test" leider mit verarbeitet. Das kann unschöne Folgen haben, z.B. wenn der übergeordnete Ordner nicht Teil der Operation sein soll (z.B. der Schreibtisch).

das liegt am dirname, der befehl liefert halt alles bis zum letzten slash.
und wenn du jetzt ein verzeichns drauf droppst, hat das wohl kein / am ende und der kürzt das letzte halt weg.
also aus /pfad/zu wird /pfad.

also wenn du jetzt nur die verzeichnisse drauf droppen würdest, dann wäre es
Code:
do shell script "find " & quoted form of the POSIX path of objectRef & " -type d -exec chown sg {} \\;" with administrator privileges
 
oneOeight
so isses. vielen dank für die augenöffnung…:confused:
Code:
        do shell script "find " & quoted form of the POSIX path of objectRef & " -type d -exec chown sg {} \\;" with administrator privileges
liefert mir jetzt das gewünschte ergebnis. daraus habe ich mir noch einen version erstellt, die im gegensatz dazu nur alle selektierten dateien und ordner (ohne rekursivsuche) verarbeitet.
vielen lieben dank
 
Liebe Mac-Gemeinde,

da habe ich noch eine Unklarheit (zumindest für mich) entdeckt. Diesmal geht es um die Abfrage von Zugriffsrechten von Ordnern im Terminal. Obige Thematik bezieht sich ja darauf. Dazu will ich die zu ändernden Dateien erst mal über das Terminal finden, weil Spotlight schwächelt da und kann angeblich zwar User-IDs finden kann, aber keine Rechte. Und Systemdateien sind ja eh nicht so die Stärke von Spotlight…

Also habe ich ein Testordner "_Test" im Application Support der Library angelegt.
Dort liegen die allermeisten relevanten Dateien, die ich kontrollieren will.

Abfrage der Zugriffsrechte für den Ordner "_Test" im Application Supprt:

SG:Application Support sg$ ls -ld /Library/Application\ Support/_test
drwxr-xr-x@ 5 sg admin 170 24 Jan 21:02 /Library/Application Support/_test

Terminal gibt also folgende Rechte des Ordners aus:

drwxr-xr-x (Ordner, Eigentümer: lesen und schreiben, Gruppe: nur lesen, Everyone: nur Lesen).
So ist der Ordner auch von mir angelegt.

Jedoch Versuche, genau diesen Ordner über die ermittelten Rechte im Umkehrschluss zu finden, scheitern in jeder Form, die ich probiere:

SG:Application Support sg$ find . -type d -perm rwxr-xr-x --mit Angabe -type D für directory
find: -perm: drwxr-xr-x: illegal mode string

SG:Application Support sg$ find . -perm drwxr-xr-x --mit Angabe d vor den Rechte-Symbolen
find: -perm: drwxr-xr-x: illegal mode string

Mit den folgenden zwei Aufrufen findet er nur die Ordner, denen gar keine Gruppe zugewiesen ist (System hat rwx, Everyone hat ---)

SG:Application Support sg$ find . -type d -perm 644 -- in Oktalversion
find: ./Apple/ParentalControls/Users: Permission denied
find: ./ApplePushService: Permission denied
find: ./com.apple.TCC: Permission denied
(jau, die Ordner kennt man ja…)

SG:Application Support sg$ find . -type d -perm 655 -- in Oktalversion
find: ./Apple/ParentalControls/Users: Permission denied
find: ./ApplePushService: Permission denied
find: ./com.apple.TCC: Permission denied

Ich muss doch nicht zwingend -user sg und -group admin in den find-string aufnehmen, oder?
Wie eng und ausschließlich dürfen die Suchkriterien sein, damit man genau den Ordner findet, der so nur einmal existiert?

Wieso produziert der ermittelte String im Umkehrschluss einen "Illegal Mode String?"
Um es abzukürzen: Wie finde ich im Application Support-Ordner alle Ordner, mit der Zuweisung "Gruppe: nur lesen"

Wenn sich jemand erbarmt, dann wäre das großartig…
vielen Dank für's lange lesen…
 
erstmal:
Code:
man chmod
die präsentation von ls -l (drwx...) wird einfach nicht von find -perm oder chmod akzeptiert.
deshalb auch:
Code:
man find
suche im man: /-perm [return] [n]

---

dein _test-ordner hat oktal 755, nicht 655 – entsprechend sollte find . -perm 755 den finden.

gruppe: nur lesen ginge mit -perm -g=r, da ordner aber meist x (r-x) enthalten -> man chmod.
 
Zuletzt bearbeitet:
Zurück
Oben Unten