Parsing-Ordner für Paare mit Bash oder AppleScript

Ich bearbeite RAW-Fotos in Photoshop mit Adobe Camera Raw. Die Bearbeitungen funktionieren folgendermaßen: Jedes Mal, wenn ich an einem Bild arbeite, erstellt Photoshop eine Textdatei mit demselben Namen wie das Bild, an dem die Bearbeitungen vorgenommen wurden. Manchmal jedoch, wenn ich ein Bild lösche oder es in einem Photomerge verwende, bleibt die XML-Datei zurück. Somit habe ich jetzt einen Ordner mit ~1100 RAW-Bildern (.NEF), ~1300 Textdateien (.xmp) und ein paar Photoshop-Dateien (.psd, .psb).

Ich möchte diesen Ordner entweder mit AppleScript oder einem Bash-Befehl parsen und die .xmp-Dateien markieren oder löschen, die keine begleitende RAW-Datei haben. Logischerweise wäre der Code: Suchen Sie für jede .xmp-Datei nach einer .NEF-Datei mit demselben Namen. Wenn .NEF nicht vorhanden ist, löschen oder markieren Sie die .xmp-Datei. Wenn .NEF vorhanden ist, tun Sie nichts.

Ich bin mit AppleScript nicht vertraut, und obwohl ich mit ffmpeg, diskutil und grundlegenden cd/ls- und rsync-Befehlen im Terminal vertraut bin, habe ich so etwas noch nie versucht und weiß nicht, wo ich anfangen soll.

Also, ich hatte gehofft, jemand hier könnte:

  1. Helfen Sie bei der Entscheidung, ob bash oder AppleScript hier besser geeignet ist UND
  2. Helfen Sie mir, die Sequenz zu schreiben ODER weisen Sie mich auf einige gute Ressourcen hin, wo ich genug lernen könnte (entweder Bash oder AppleScript), um die Sequenz selbst zu schreiben.
Kommentare sind nicht für längere Diskussionen gedacht; Diese Konversation wurde in den Chat verschoben .

Antworten (1)

Wechseln Sie im Terminal in das Verzeichnis, z. B. cd /path/to/files, zum Speicherort der Zieldateien, und verwenden Sie dann den folgenden Befehl, um alle .xmpDateien zu löschen, für die es keine entsprechende .NEFDatei gibt:

for f in *.xmp; do [[ ! -f ${f%.*}.NEF ]] && rm "$f"; done
Das funktioniert perfekt! Das ist so viel einfacher als ich dachte!
Wäre das nicht "${f%.*}.xmp"dasselbe "$f"?
@fd0, in diesem Fall ja, es ist dasselbe und funktioniert natürlich so oder so. Ich habe dies gepostet, bevor ich Kaffee getrunken hatte, und war faul durch Kopieren und Einfügen von Änderungen ${f%.*}.NEFin "${f%.*}.xmp". Ich habe es jetzt gekürzt.
@ user3439894 Extrapunkte für eine gute Verwendung von Lazy Execution.