Variablen im Automator ändern

K

klatuu

Neues Mitglied
Thread Starter
Dabei seit
07.02.2014
Beiträge
13
Reaktionspunkte
0
Hallo MacUser,

meine Frage:
Kann ich im Automator Variablen verändern? z.B.

Ich hole mir die Variable Quellordner

nun heißt diese aber /User/.../.../Zielordner

Ich möchte das diese danach aber geändert wird weil ich eben NUR den Zielordner in der Variablen haben möchte und nicht den ganzen müll davor.

Sinn dahinter er soll mir bei einem erstellten Zip Archiv das Archiv.zip ändern in Zielordner.zip.
und bei mir heißt die Zip eben /User/.../.../Zielordner "mist"

Gibt es da eine Möglichkeit?

Gruß Klatuu
 
Du kannst das z.B. über ein Shellscript machen:

Bildschirmfoto 2014-02-07 um 13.48.51.png
 
Gut kannst du mir das Shellscript etwas erklären damit ich auch weiß was er dann macht und vor allem wo ich das einfügen muss.

Leider kann ich dir mein Automator nicht posten da ich nicht berechtig bin Anhänge mit anzugeben.

Gruß Klatuu
 
Du fügst einfach an der entsprechenden Stelle die Aktion "Shell-Script ausführen" ein, wählst bei der Aktion rechts oben "Eingabe übergeben als: Argumente" aus und gibst als Skript den Text basename $@ ein. basename ist ein Befehl, der von einem Pfadname den Dateinamen extrahiert. $@ ist die Eingabe (Argument), die diese Aktion erhält.

Ein Beispielskript sieht z.B. so aus:

Bildschirmfoto 2014-02-07 um 14.34.00.png
 
gut und wie übergebe ich es jetzt dem Text ersetzen befehl das er dort den Text eingibt.

Text ersetzen

Suchen: Archiv
Ersetzen durch : "Ordnername??" <----
 
So könnte das aussehen, falls du das meinst:

Bildschirmfoto 2014-02-07 um 15.04.04.png

Skript:

Code:
for f in "$@"do
    mv "$f" "$(dirname "$f")"/"$(basename "$(dirname "$f")")".zip
done
 

Anhänge

  • Bildschirmfoto 2014-02-07 um 14.54.38.png
    Bildschirmfoto 2014-02-07 um 14.54.38.png
    60,3 KB · Aufrufe: 128
Aber in deinem Fall würder er doch jetzt das Zip in folgendes umbennen oder: test.zip sehe ich das richtig?
 
Ja, wolltest du das nicht? Lade doch mal einen Screenshot hoch (z.B. bei http://www.directupload.net), dann verstehe ich vielleicht besser, was du meinst.
 
Also

Hier der Link

http://www.directupload.net/file/d/3526/ahfl8nic_jpg.htm

zur Erklärung.

ich habe 1 Ordner da sind x Ordner drin in diesem sind Bilder (siehe Link 2)

http://www.directupload.net/file/d/3526/cya5dnvj_jpg.htm

diese Bilder sollen umgewandelt werden in .jpg und dann am ende gezipt werden und das zip muss so heißen wie der Ordner (oder die datein ohne die _00x.jpg Endung)

Und ganz zum Schluss muss die Zip in einen Ordner X

Ich hoffe das war jetzt halbwegs zu versehen ;)

Gruß Klatuu


In dem Fall wie es auf dem Bild ist gibt mir das Shell einen Fehler aus
 
Folgendes Skript erstellt ein Zip-File mit den entsprechenden JPEGs im übergeordneten Ordner:

Code:
#!/bin/bash

find "$@" -name "*.png"|while read i
do
    zipFolder="$(dirname "$i")"/"$(basename "$(dirname "$i")")";
    mkdir -p "$zipFolder";
    sips -s format jpeg "$i" --out "$zipFolder/";
    zip -rmj "$(dirname "$zipFolder")".zip "$zipFolder";
done

Bildschirmfoto 2014-02-07 um 17.06.48.png
 
Gut ich werde es am Montag testen da ich zuhause keinen Mac habe ;)
 
Guten Morgen,

also ich habe dein Script soweit eingefügt und den Ordner ausgewählt wo die Bilder enthalten sind,
er erstellt mir einen unterordner mit dem gleichen Namen und sagt dann:

Bei der Aktion Shell-Skript ausführen ist ein Fehler aufgetreten.
Überprüfen Sie die Aktionseigenschaften und versuchen Sie, den Arbeitsablauf erneut auszuführen.

Es werden sozusagen keine .jgps erstellt und auch keine Zip datei.

Gruß Klatuu
 
Klicke bitte mal bei der Aktion "Shellscript ausführen" unten auf Ergebnisse, dort müsste eine genauere Fehlermeldung stehen.
 
Error 10: out_dir_not_found /User/..../212013103/212013203
 
Ich kann den Fehler bei mir nicht reproduzieren, vielleicht gehts aber so:

Code:
#!/bin/bash

find "$@" -name "*.png"|while read i
do
    zipFolder="$(dirname "$i")"/"$(basename "$(dirname "$i")")";
    mkdir -p "$zipFolder";
    sips -s format jpeg "$i" --out "$zipFolder";
    zip -rmj "$(dirname "$zipFolder")".zip "$zipFolder";
done

Der Fehler tritt wohl bei sips auf, ich habe mal den / am Ende weggelassen, das könnte das Problem lösen.
 
Okay ein Teil geht jetzt, es lag wirklich an dem / am Ende.

Zip ist erstellt mit Inhalt .jpg

Was scheinbar nicht geht ist das er mir die .jpg noch in den gleichen Ordner macht wie auch die .png ist weil ich das als extra Sicherung brauche.
Er erstellt mir immer noch den Unterordner der dann aber leer ist.

Folgende Optimierung wäre das non plus Ultra.

.jpg im gleichen Ordner wie die .png, Unterordner braucht er nicht erstellen.


Ich Danke dir trozdem schon mal für die bis hierhin vollbrachte Arbeit.

Gruß Klatuu
 
Das lässt sich sicher alles machen. Nur um sicher zu gehen, so soll das ganze dann aussehen?

Startordner
---Unterordner1
------Bild1.png
------Bild1.jpg
------Bild2.png
------Bild2.jpg
------Bild3.png
------Bild3.jpg
------Unterordner1.zip
---Unterordner2
------Bild1.png
------Bild1.jpg
------Bild2.png
------Bild2.jpg
------Bild3.png
------Bild3.jpg
------Unterordner2.zip

Falls ja, dann teste mal folgendes:

Code:
#!/bin/bash

find "$@" -name "*.png"|while read i
do
      zipFolder="$(dirname "$i")";
      sips -s format jpeg "$i" --out "$zipFolder";
      zip -rj "$zipFolder"/"$(basename "$zipFolder")".zip "${i%.*}.jpg";  
done

Der Ordner, in dem das zip-File gespeichert wird, lässt sich auch einfach ändern, falls du das möchtest.
 
Zuletzt bearbeitet:
Also es soll alles so bleiben wie es ist nur....



Startordner(enthält Unterordner1.zip, Unterordner2.zip (so ist es ja jetzt))
---Unterordner1
------Bild1.png
------Bild1.jpg
------Bild2.png
------Bild2.jpg
---Unterordner2
------Bild1.png
------Bild1.jpg
------Bild2.png
------Bild2.jpg

Wichtig in den Zip dürfen auch weiterhin nur die jpgs enthalten sein.

Wie schon gesagt vielen Dank das erspart mir 70% meiner Arbeit mit dem .... ;)

Gruß Klatuu
 
Hi Pill,

die wenn du mir nur die Unterordner die er erstellt und dann leer sind rausnehmen kannst reicht das, ich brauche die JPGs nicht nochmal es reicht wenn sie in der Zip sind.


Ich Danke die nochmals für die hilfe.

Gruß Klatuu

P.S. was jetzt natürlich gut wäre wenn du mir kurz erklären könntest was er bei welchem befehl im Shellskript macht damit ich es auch weiß und evtl auf andere sachen anwenden kann.
 
Das Skript funktioniert folgendermaßen:

Code:
find "[COLOR=#800080]$@[/COLOR]" -name "*.png"|[COLOR=#008000]while read [/COLOR][COLOR=#ff0000]i[/COLOR][COLOR=#008000][/COLOR]
[COLOR=#008000]do
[/COLOR]      [COLOR=#0000FF]zipFolder[/COLOR]="$([COLOR=#FF8C00]dirname "[/COLOR][COLOR=#FF0000]$i[/COLOR][COLOR=#FF8C00]"[/COLOR])";
      sips -s format jpeg "[COLOR=#FF0000]$i[/COLOR]" --out "[COLOR=#0000FF]$zipFolder[/COLOR]";
      zip -rj "[COLOR=#0000FF]$zipFolder[/COLOR]"/"$([COLOR=#ff8c00]basename[/COLOR] "[COLOR=#0000FF]$zipFolder[/COLOR]")".zip "[COLOR=#FF0000]${i%.*}[/COLOR].jpg"; 
[COLOR=#008000]done[/COLOR]

find sucht im übergebenen Pfad nach allen Dateien, die auf ".png" enden und übergibt sie ("|") an die nachfolgende while-Schleife. Diese geht die gefundenen Dateien der Reihe nach durch, die jeweils aktuelle Datei ist in der Variablen i gespeichert.

dirname "/Pfad/Datei.txt" gibt den Ordner zurück, in dem sich eine Datei befindet (also "/Pfad"). Das Ergebnis wird in der Variablen zipFolder gespeichert. Analog gibt basename den Namen einer Datei zurück ohne den restlichen Pfad (aus /Pfad/Datei.txt wird Datei.txt).

sips (scriptable image processing system) ist ein Befehl zum Bearbeiten von Bildern. -s unterdrückt Meldungen, format jpeg konvertiert in das JPEG-Format, $i ist die Eingabedatei und nach --out wird der Ausgabeordner angegeben.

zip -[OPTION] Ausgabedatei.zip Eingabedatei packt die Eingabedatei in die Ausgabedatei. Um die Eingabedatei zu bestimmen wird hier Parameter Substitution benutzt um die Dateiendung .png zu entfernen und stattdessen wird dann .jpg drangehängt.

Details zu den einzelnen Befehlen und ihren Optionen erhältst du, wenn du im Terminal man Befehl (z.B. man sips) eingibst.
 
Zurück
Oben Unten