PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : JHead



linux_new
07.06.09, 19:47
Hallo,

ich benutze JHead zur Umbenennung meiner Bilddateien nach den Exif-Daten.

Vorher: DSC03781.JPG Hinterher: 2009-04-03_13-25-37.JPG

so sieht der Befehl dafür aus:

jhead -n%Y-%m-%d_%H-%M-%S *.JPG

Das klappt mit JHead halt nur für den aktuellen Ordner. Die Funktion das es rekursiv geht, gibt es für jhead nur für Windows :(

Wie kann ich unter Linux in Unterverzeichnissen meine JPG Bilddateien alle samt mit einmal ändern?

Momentan bin ich gezwungen in jedes einzelne Verzeichnis zu wechseln und dann jhead -n%Y-%m-%d_%H-%M-%S *.JPG auszuführen.

Danke für die Hilfe!

oziris
07.06.09, 20:22
Siehe "man find" bei den Optionen "-type", "-iname" und "-exec".
Falls es Probleme mit find gibt, werden Dir hier viele Leute helfen können, da es eine sehr beliebte Software ist.

linux_new
07.06.09, 21:32
#!/bin/bash


# JPG umbennen
find ~/Pfadzu/Pictures -iname \*.JPG -exec jhead -n%Y-%m-%d_%H-%M-%S *.JPG;



Ich hab mal ein wenig googled - würde das Script da oben so funktionieren wie es sollte?

oziris
07.06.09, 21:44
Erstens: Nein, weil Du den Platzhalter für die gefundene Datei "{}" statt dem letzten "*.JPG" benutzen und das Semikolon am Ende mit einem Leerzeichen trennen und einem Backslash escapen musst ("\;", alternativ kann man aber auch ein "+" nehmen, was in diesem Fall vermutlich sogar besser wäre).

Zweitens: Kannst Du es ja in einem kleinen Testverzeichnis mit ein Paar Beispielbildern in Unterverzeichnissen testen und solltest sowieso ein Backup haben, damit ein Scheitern nicht so schlimm wäre.

PS: Wozu googeln? Steht doch alles in "man find" ... sogar mit Beispielen ... :rolleyes:

linux_new
07.06.09, 22:05
Erstens: Nein, weil Du den Platzhalter für die gefundene Datei "{}" statt dem letzten "*.JPG" benutzen und das Semikolon am Ende mit einem Leerzeichen trennen und einem Backslash escapen musst ("\;", alternativ kann man aber auch ein "+" nehmen, was in diesem Fall vermutlich sogar besser wäre).

Zweitens: Kannst Du es ja in einem kleinen Testverzeichnis mit ein Paar Beispielbildern in Unterverzeichnissen testen und solltest sowieso ein Backup haben, damit ein Scheitern nicht so schlimm wäre.

PS: Wozu googeln? Steht doch alles in "man find" ... sogar mit Beispielen ... :rolleyes:


ich mußte googlen, da ich in Sachen BashScripting in dem Sinne ein Newbie bin. Learning by Doing ist immer noch die effektivste Methode klar, aber hier bin ich an meine Grenzen gestoßen.

Ich teste das mal bei Gelegenheit in einem Testverzeichnis - mal sehen, ob ich die Scriptidee soweit richtig abändern kann.

Danke jedenfalls für die Hilfe!

linux_new
08.06.09, 13:58
#!/bin/bash

# JPG umbennen
find ~/Pfadzu/Pictures -iname \*.JPG -exec jhead -n%Y-%m-%d_%H-%M-%S {} \;


so funktioniert das - okay!

im nächsten Schritt will ich die Pfadangabe noch ändern, d.h. es soll der aktuelle Pfad als Ausgangspunkt genommen werden, in dem man sich auf der Konsole befindet bzw. denn man dem Skript manuell übergeben kann?

linux_new
08.06.09, 16:37
so ich bin wieder ein Schritt weiter

mit $PWD bekomme ich den aktuellen Pfad übergeben


find $PWD -iname \*.JPG -exec jhead -n%Y-%m-%d_%H-%M-%S {} \;

ist nur die Frage wie ich das hin bekomme mit der Abfrage $1, wenn ein Wert übergeben wird (der Pfad wo was gemacht werden soll) bzw. wenn nix angegeben ist $PWD benutzt

John W
08.06.09, 16:57
PWD kannste weglassen, find nutzt per default das aktuelle Verzeichnis.

find -iname \*.JPG -exec jhead -n%Y-%m-%d_%H-%M-%S {} \;

linux_new
08.06.09, 17:21
find $1 -iname \*.JPG -exec jhead -n%Y-%m-%d_%H-%M-%S {} \;

ah okay da sollte das mit $1 so klappen
wenn da keine Angabe nach dem Skript gemacht wird, dann führt es im aktuellen Verzeichnis das aus, sonst in dem angegebenen Pfad

teste ich mal in meiner virtuellen Umgebung, nicht das von / an alle jpg so durchforstet werden - das will ich nun nicht haben

linux_new
08.06.09, 23:12
Es klappt so wie ich mir es vorgestellt hab!

Danke für die Hilfe
@oziris für
"Siehe "man find" bei den Optionen "-type", "-iname" und "-exec"."

und

@John W für
"weglassen von $PWD"

:)