Automator: Dienst zum Verschieben von Dateien in neue Unterordner basierend auf der Dateierweiterung *innerhalb eines beliebigen ausgewählten Ordners*

Ich habe jetzt schon eine ganze Weile gesucht, kann aber anscheinend keine relevante Anleitung für diese spezielle Aufgabe finden. Ich bin ganz neu auf diesem Gebiet, also entschuldigen Sie, wenn ich etwas Grundlegendes vermisse.

Wie viele Fotografen komme ich von einem Shooting mit einer Karte zurück, die RAW- (CR2), JPG- und MOV-Dateien in einem einzigen Ordner enthält. Nachdem ich diesen Ordner auf meine Festplatte kopiert habe, muss ich die folgenden Aktionen ausführen, für die ich einen einzelnen Dienst erstellen möchte, damit ich denselben Prozess für jeden beliebigen Ordner ausführen kann.

Also hier ist, was ich automatisieren möchte:

  1. Erstellen Sie innerhalb des ausgewählten Ordners separate Ordner für Raw, JPG und Video.
  2. Identifizieren Sie Dateien jedes Typs und verschieben Sie sie in die im ersten Schritt erstellten Ordner.

Ich dachte, das wäre einfach, aber das Problem scheint in meiner Notwendigkeit zu liegen, dass dies ein generischer Dienst ist, der nicht an einen bestimmten Ordnerpfad gebunden ist. Ich brauche es, um für andere Ordner wiederholbar zu sein, aber ich kann diesen wesentlichen Vielseitigkeitsaspekt nicht herausfinden.

Ich habe bereits ein Apple Script gefunden und angepasst (siehe unten), das die benötigten Unterordner erstellt. Dieser Teil funktioniert gut als eigenständiger Dienst. Aber ich kann anscheinend nicht den zweiten Schritt ausführen, der das eigentliche Verschieben von Dateien durchführen würde.

Ich weiß, wie man Dateien eines bestimmten Typs in einen bestimmten Ordner verschiebt , aber das ist nicht das, was ich brauche. Ich möchte, dass alle JPGs in einem bestimmten Ordner in einen neuen Unterordner namens JPG innerhalb des ausgewählten Ordners verschoben werden , und ebenso für die anderen Dateitypen. Ich verstehe, wie man diese Dateitypen filtert, aber bisher kann ich nicht herausfinden, wie man sie in einen Ordner verschiebt, ohne einen Pfad angeben zu müssen, ich weiß nicht, wie man auf Ordner zeigt, die noch nicht existieren. Selbst wenn ich könnte, wären diese Pfade für jeden Ordner, an dem ich arbeiten muss, unterschiedlich.

Kann mir jemand einen Rat geben oder mich auf eine relevante Diskussion hinweisen?

Vielen herzlichen Dank.

///

Hier ist das Apple-Skript für meinen Dienst zum Erstellen von Unterordnern:Unterordner Skript

Skripttext:

on run {input, parameters}
    set output to {}
    tell application "Finder"
        set {source_folder, source_name} to {it, name} of first item of input
        repeat with prefix in {"JPG - ", "RAW - ", "Edits - ", "Video - "}
            make new folder at source_folder with properties {name:contents of prefix & source_name}
            set end of output to result as alias
        end repeat

Hinweis: Der Teil der Automatisierung zum Verschieben von Dateien betrifft nicht den Ordner "Bearbeitungen - ". Dies ist nur ein Container für zukünftige Dateien.

Wählen Sie den zu sortierenden Ordner aus, um den Dienst auszuführen, oder öffnen Sie den Ordner und wählen dann die Ausführung des Dienstes aus dem Finder- Menü?

Antworten (2)

Wenn ich mehrere Ordner innerhalb eines ausgewählten Ordners erstellen und die vorhandenen Dateien innerhalb des ausgewählten Ordners basierend auf der Dateierweiterung in die innerhalb des ausgewählten Ordners erstellten Ordner verschieben möchte, würde ich kein AppleScript verwenden bash.

Der folgende Dienst nimmt die ausgewählten Ordner im Finder und führt Folgendes aus:

  • Erstellt die folgenden Ordner innerhalb des ausgewählten Ordners, wobei "$parent_folder_name" der Name des ausgewählten Ordners ist, auf dem der Dienst ausgeführt wird:
    • "Bearbeitungen - $parent_folder_name"
    • "JPG - $parent_folder_name"
    • "RAW - $parent_folder_name"
    • "Video - $parent_folder_name"
  • Verschiebt die vorhandenen Dateien basierend auf der Dateierweiterung in die neu erstellten Ordner.

for f in "$@"; do
    cd "$f"
    d="$(basename "$f")"
    mkdir -p "Edits - $d" "JPG - $d" "Raw - $d" "Video - $d"
    mv *.JPG "./JPG - $d"
    mv *.CR2 "./RAW - $d"
    mv *.MOV "./Video - $d"
done

Geben Sie hier die Bildbeschreibung ein

Ich fühle mich schlecht, wenn ich das schöne Applescript von @CJK nicht verwende, aber ich habe entschieden, dass Ihre Bash für einen Noob wie mich später einfacher zu optimieren ist. Es funktioniert einwandfrei, vielen Dank! Ich kenne so viele Leute, die froh sein werden, diese Abkürzung zu haben.

Ich bin davon ausgegangen, dass Sie die eigentlichen Ordner auswählen , um sie beispielsweise über das kontextbezogene Rechtsklick-Dienstemenü an Ihren Automator- Dienst-Workflow zu übergeben.

In Anbetracht dessen würde Ihr Service-Workflow wie folgt aussehen:

Automator-Workflow auf macOS

Hier ist das Skript, das in die Aktion einfließt Run AppleScript:

on run input
    set [input] to the input

    repeat with directory in the input
        organiseFilesOfFolder_(POSIX path of the directory)
    end repeat

end run

to organiseFilesOfFolder:f
    local f

    script SourceFolder
        use sys : application "System Events"

        property location : a reference to folder f of sys
        property name : (a reference to name of my location)

        script JPGs
            property folder : missing value
            property name extension : "jpg"
            property list : {}
            property id : "JPG"
        end script

        script RAWfiles
            property folder : missing value
            property name extension : "cr2"
            property list : {}
            property id : "RAW"
        end script

        script Videos
            property folder : missing value
            property name extension : "mov"
            property list : {}
            property id : "Video"
        end script

        script Edits
            property folder : missing value
            property id : "Edits"
        end script


        to make new "folder" given type:fileType
            [fileType's id, " - ", my name's contents]

            make new folder at my location ¬
                with properties {name:¬
                contents of result as text}

            set the folder of the fileType to the result
        end make

        on listOf:fileItems
            set the list of fileItems to (every file ¬
                of my location where its name extension ¬
                is the name extension of the fileItems)
        end listOf:
    end script

    tell the SourceFolder
        repeat with fileType in its [JPGs, RAWfiles, Videos, Edits]
            make new "folder" given type class:fileType
            if the contents of the fileType = its Edits then ¬
                exit repeat

            if (its listOf:fileType) is not {} then ¬
                tell application "System Events" to move ¬
                    list of fileType to the ¬
                    folder of the fileType
        end repeat
    end tell
end organiseFilesOfFolder:
Offensichtlich, wenn die Anforderungen des OP nur AppleScript sind, dann ist das in Ordnung, aber meiner Meinung nach ist es ein Overkill für eine so einfache Aufgabe, die in acht Codezeilen mit einem Run Shell Script bashvs. Run AppleScript erledigt werden kann. Aber schönes Skript!
@ user3439894 Angesichts der Tatsache, dass das OP einen Teilversuch in AppleScript bereitgestellt hat, denke ich, dass CJK hier genau richtig ist. Obwohl ich denke, dass beide Ansätze funktionieren, denke ich, dass dies die bessere Antwort ist. +1 hier
Ich muss @ user3439894 zustimmen, es ist total übertrieben und nicht klar, welche Extras es im Vergleich zu seiner Antwort macht.
@Buscar웃 Wenn du so denkst, warum verleihst du Hit dann nicht eine positive Bewertung?
@ʀ2ᴅ2 wer isthit
@ʀ2ᴅ2 OK, du hast Recht, ich habe gerade das getan, was David eine positive Stimme gegeben hat
@Buscar웃 war auf meinem Handy sorry for hit. Ich meinte, wenn Sie denken, dass Bash der bessere Ansatz ist, warum nicht die Lösung positiv bewerten? Ich habe CJK positiv bewertet, weil er die Frage mit reinem AppleScript beantwortet hat, da dies anscheinend die Anfrage war. Wenn der Benutzer eine AppleScript-Lösung eingebunden hätte, aber dann erwähnt hätte, dass Bash besser ist, hätte ich auch seine positiv bewertet. Wenn der Benutzer das getan hätte, wäre diese Antwort der bessere Ansatz.
@ʀ2ᴅ2 wir haben die Please avoid extended discussions in comments. also belassen wir es dabei. Letztlich entscheidet der OP.
@CJK Das ist wunderschön. Vielen Dank, dass Sie sich so viel Mühe gegeben haben. Ich war wirklich hin und her gerissen, eine Antwort auszuwählen, aber leider bin ich am Ende den Bash-Skript-Weg gegangen. Aber ganz und gar nicht deine Schuld. Es ist einfach einfacher für mein Baby-Codierungsgehirn, dieses einfachere Skript zu verstehen, was die Dinge für mich weniger verwirrend macht, wenn ich den Prozess in Zukunft optimieren muss. So schön Ihr Applescript auch ist, ich würde mir Sorgen machen, etwas zu ruinieren, wenn ich versuchen würde, es selbst anzupassen. Vielen Dank für die schnelle und ausführliche Antwort. So dankbar für diese Community gerade jetzt.