• 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,

hatte doch noch mal Lust auf Python.
War aber schwerer als erwartet. Probier das doch mal:

Code:
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import os, sys

# Change this to your jpg-directory, for example to
# mydir = "/home/user"
mydir = os.getcwd()

PREF = "neu-"

done = ["No", 0, 0]
if len(sys.argv) > 1:
    done[0] = sys.argv[1]

a = os.listdir(mydir)
b = []
c = []
d = []
x = 1

def zeros(a):

    if len(str(a)) > 5:
        print "More than 99.999 files. Exiting !\n"
        sys.exit()

    b = ""
    for i in range(5 - len(str(a))):
        b += "0"
    return(b)

for i in a:
    if i.endswith(".jpg") or i.endswith(".jpeg"):
        if os.path.isfile(mydir + "/" + i):
            b.append(i)

for i in b:
   
    if len(i) == 13:

        numbs = i[4:9]

        if numbs.isdigit() and i == PREF + numbs + ".jpg":
            if done[1] == 0 and done[0] == "-v":
                print
            if done[0] == "-v":
                print 'Leaving file "' + i + '" unchanged.'
            c.append(i)
            done[1] += 1
            continue

    d.append(i)

for i in range(len(d)):

    fromfile = d[i]
   
    y = 0

    while y == 0:
        y = 1
        tofile = PREF + zeros(x) + str(x) + ".jpg"
        for u in c:
            if tofile == u:
                x += 1
                y = 0
                break
    x += 1

    if done[1] == 0 and done[0] == "-v":
        print
 
    if done[0] == "-v":
        print 'Changing file "' + fromfile + '" to "' + tofile + '".'

    fromfile = mydir + "/" + fromfile
    tofile = mydir + "/" + tofile

    sysstr="mv " + fromfile + " " + tofile
    os.system(sysstr)
    done[2] += 1

print
print "Finished:"
if done[1] == 0 and done[2] == 0:
    print "Nothing done."
else:
    print "Left unchanged:\t" + str(done[1]) + " file(s)."
    print "Renamed:\t" + str(done[2]) + " file(s)."
print

Viele Grüße
 
Hi,

ich danke euch nochmal für eure Mühe, einem Script-Anfänger zu helfen!

Ich habe mich erst mal für die "*jp*g"-Lösung entschieden.. Das ich eine Datei namens "uithgrjpuigiolggrtlöhjl" hier vorfinde, scheint mir so unwahrscheinlich, das es das Script so tut :D

Ich werde aber auch die Phython-Lösung bei Zeiten mal ausprobieren.

Schoenes Wochenende euch allen!

Gruesse aus dem Ruhrgebiet,
Jens
 
Wenn du *.jp*g statt *jp*g nimmst, reduzierst du sogar noch die Wahrscheinlichkeit. Aber du kannst auch schreiben *.jp{,e}g
 
Ich werde aber auch die Phython-Lösung bei Zeiten mal ausprobieren.

Prima. Ohne Änderungen verarbeitet mein Python-Skript das Verzeichnis, in dem es sich gerade befindet (die Funktion "os.getcwd()" in Python entspricht dem Konsolen-Befehl "pwd").
Die Einrückungen des Textes sind von Bedeutung. Ich lege daher das Skript nochmal woanders ab, Du kannst es jetzt also auch mit

Code:
wget -c http://www.angelfire.com/linux/tux25/jpgren.py

bequem herunterladen (ohne Dich um korrektes "Copy & Paste" des Skripttextes bemühen zu müssen).
Du mußt dann ggf. noch
Code:
chmod +x jpgren.py
machen und kannst das Skript dann mit "./jpgren.py" ausführen.

Viele Grüße

Edit: Update:
Zeigt Anzahl verarbeiteter Dateien.
Starte mit "./jpgren.py -v" für "verbose".
 
Oben