• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[gelöst] Bilder via Script umbenennen (advanced)

Hi alle,

gibt es eine einfache Möglichkeit, folgendes zu realisieren?

Ich habe ein Verzeichnis mit zig-tausend Bildern und es werden täglich mehr (nein, kein Schmutzkram, falls sowas in der Richtung als Kommentar kommt :) ).

Ich möchte diese Bilder gerne per Script umbenennen, und zwar nach folgendem Schema:

Alle Bilder (*.jpg oder *.jpeg) werden umbenannt in "(prefix)-(5-stellige Nummer).jpg", wenn sie diesem Muster nicht entsprechen, wobei natürlich keine vorhandenen Dateien überschrieben aber die Lücken nach einer Dublettensuche (und dem Löschen natürlich :) ) wieder ausgefüllt werden.

Leider hat die Suche hier im Forum nichts derartiges ergeben (zumindest nicht für meine Suchkriterien). Vielleicht habe ich aber auch falsch gesucht, das moechte ich nicht ausschliessen.....

Für sachdienliche Hinweise bin ich sehr dankbar!

Gruesse aus dem Ruhrgebiet,
Jens
 

Fat_Fox

Hacker
ifranview kann das aber das kenn ich nur für windows.

das hier soll so ähnlich sein und das gibts auch für linux (wär ja gelacht gewesen *g*)

http://perso.orange.fr/pierre.g/xnview/de_ncdownload.html

edit:

Hi,
tnx for Info, aber ich suche da eher was, das scriptfähig ist, nicht eine Anwendung...

ich versteh zwar das problem nicht, aber gut befasse dich mit dem Thema shellprogrammierung oder einer programiersprache deiner wahl, da hast du was scriptfähiges bzw. kannst es scriptfähig machen...aber warum das rad neu erfinden...nu ja du musst es wissen.
 
OP
J

jensemann67

Newbie
Hi,

tnx for Info, aber ich suche da eher was, das scriptfähig ist, nicht eine Anwendung...

Gruesse aus dem Ruhrgebiet,
Jens
 

abgdf

Guru
Hi,

1. schau Dir mal "mmv" an.

Bitte lies dazu auch den Abschnitt "Dateien umbenennen (mmv, rename)" auf meiner Seite ("www-Button" unten).

Kommst Du damit schon zurecht ?

oder

2. Wie soll denn der Prefix sein ?

Viele Grüße
 
jensemann67 schrieb:
Alle Bilder (*.jpg oder *.jpeg) werden umbenannt in "(prefix)-(5-stellige Nummer).jpg", wenn sie diesem Muster nicht entsprechen, wobei natürlich keine vorhandenen Dateien überschrieben aber die Lücken nach einer Dublettensuche (und dem Löschen natürlich :) ) wieder ausgefüllt werden.
Code:
for f in *.jpg *.jpeg; do
    i=$[$i+1];
    mv "$f" `printf pfx-%05d.jpg $i`;
done;
 
OP
J

jensemann67

Newbie
abgdf schrieb:
2. Wie soll denn der Prefix sein ?

Prefix sei z.B. "neu-" ...

Mein Problem ist nicht, das mit dem reinen Umbenennen hinzubekommen, sondern die Erhaltung der Dateien, die diesem Filespec schon entsprechen.

Weiter im nächsten Post...
 
OP
J

jensemann67

Newbie
jengelh schrieb:
Code:
for f in *.jpg *.jpeg; do
    i=$[$i+1];
    mv "$f" `printf pfx-%05d.jpg $i`;
done;

So ähnlich sah das bei mir auch aus, dennoch danke! Das Problem ist nur, dass Dateien, die bereits dem Filespec "<spec>-xxxxx.jpg" im gleichen Verzeichnis vorhanden sind, mit diesem Script gnadenlos überschrieben werden.

Ich würde diese Dateien allerdings liebend gerne erhalten, auch mit dem gleichen Namen versteht sich :)

Gruesse aus dem Ruhrgebiet,
Jens
 
OP
J

jensemann67

Newbie
abgdf schrieb:
Ja gut, aber welchen Namen sollen dann die "neuen" Dateien erhalten ?

Also:

Nehmen wir mal an: folgendes existiert in einem Verzeichnis:

neu-00001.jpg
neu-00002.jpg
neu-00004.jpg
irgendein-dateiname.jpg
nochein-dateiname.jpeg

Nun soll das Script eben genau die unteren beiden Dateien finden und umbenennen, und zwar die erste in "neu-00003.jpg" und die nächste in "neu-00005.jpg".

Wenn dann wieder neue Dateien im Verzeichnis landen, die nicht dem Spec entsprechen und ich das Script erneut ausführe, so folgt dann bei der Umbenennung "neu-00006.jpg" und so weiter.

Das Script soll also immer wieder (per chronjob) im gleichen Verzeichnis laufen und neue Dateien umbenennen, ohne die alten zu überschreiben.

Ich hoffe, ich habe das einigermassen verständlich erklärt :)

Gruesse aus dem Ruhrgebiet,
Jens
 
Code:
(c=0; IFS="
"; find . -type f ! -iname "neu-?????.jpg" | while read f; do
    c=$[$c+1];
    while [ -e `printf neu-%05d.jpg $c` ]; do
        c=$[$c+1];
    done;
    mv "$f" `printf neu-%05d.jpg $c`;
done);
Ein anderer darf das nun auf seine Richtigkeit überprüfen... 8)
 
Interessante Feststellung: Da while read verwendet wird, bräuchte man das IFS nicht, sondern nur wenn es for f in `find ...` gewesen wäre.
 
OP
J

jensemann67

Newbie
Hi,

jengelh schrieb:
Datum => `date +%Y-%d-%m`

Wobei das allerdings das Datum der Datei ist, während taki das Datum aus den Metadaten des Bildes meint.

Aber ich bin eigentlich schon zufrieden, wollte es nur für die Nachwelt noch mal erwähnt haben :D

Gruesse aus dem Ruhrgebiet,
Jens
 
OP
J

jensemann67

Newbie
Hi,

ich habe da doch noch so ein kleines Problem mit dem Script:
(kämpfe mich derzeit durch die shell-script Programmierung)

Das Script benennt ja nun gnadenlos alles um, was nicht dem Spec "neu-xxxxx.jpg" entspricht, auch in allen Unterverzeichnissen und natürlich auch irgendwelche Indizes diverser Bildbearbeitungs- und -betrachtungssoftware.

Ich wollte aber doch eigentlich nur alle *.jpg und *.jpeg umbennen :) Kämpfe gerade mit dem Find-Statement rum.....

Hat da jemand von euch Gurus einen Tipp :?: :roll:

Gruesse aus dem Ruhrgebiet,
Jens
 

abgdf

Guru
Hi,

ein erster Tip für find wäre

Code:
find -maxdepth 1 -name "*jp*g"

jp*g matcht aber z.B. auch jpichbineineganzanderedateig :(.

Zum bash-Einstieg siehe u.a. meine Seite

http://www.angelfire.com/linux/tux25/bash.html

Ich könnte Dein Skript in Python (mit "mv" am Ende) schreiben. Nur war jengelh eben schneller ...

Viele Grüße
 
Oben