Das Umbenennen mehrerer Dateien

  • hi leute,

    mein wunsch ist einen shell-script zu schreiben, der alle jpeg-dateien in einem gegebenen ordner automatisch umbenennt, und zwar beginnend mit 01.jpg, 02.jpg, usw... bis 99.jpg (oder je nachdem wieviele dateien es im ordner gibt). es würde sich echt auszahlen so was zu schreiben, denn die ganzen dateien manuell umzubenennen ist wirklich sehr unangenehm. :mad:
    fotos die ich von meiner kamera hochlade kriegen immer komische namen wie IMG_0001.jpg oder so. das will ich eben nicht.
    habt ihr da eine ahnung wie des am besten gehen könnte?

    The idea behind this technique is surprisingly simple: just go ahead and do whatever you want to without paying attention to what anybody else is doing. If there is a problem, worry about it later. (Many politicians use this algorithm, too) -- A. S. Tanenbaum, M. v. Steen, Distributed Systems

  • Zentor: das programm ist glaub ich tatsächlich nur für windows, obwohls freeware ist.
    @CitizenX: das programm das du vorgeschlagen hast tut eigentlich schon das was ich wollte, aber irgendwie kann ich damit keine laufende numerierung erhalten, ich hab die dokumentation mehrmals durchgelesen aber ich schaffs nicht. :hewa:
    Jimmy: diese sache überschreitet glaub ich mein wissen schon ein bissl. da gehts zwar auch genau um das automatisieren der umbenennungen aber ich kann einfach das problem mit der numerierung nicht lösen.
    wie soll ich denn in der for-schleife angeben dass die erste datei den namen 01.jpg und die zweite 02.jpg usw... bekommt??
    oder soll ich das vielleicht in einer while-schleife tun, wo ich eine laufvariable erzeug und die laufvariable bis zur anzahl der dateien gehen lasse. die anzahl der dateien im gegebenen ordner könnte ich mit `ls <directory> | wc -l ` herausfinden.
    was glaubt ihr???
    und den entsprechenden wert der laufvariable könnte dann in der while-schleife die entsprechende datei bekommen...
    würde so was funktionieren? es ist mir noch ein wenig unklar wie ich sowas als shell-script schreiben soll.

    The idea behind this technique is surprisingly simple: just go ahead and do whatever you want to without paying attention to what anybody else is doing. If there is a problem, worry about it later. (Many politicians use this algorithm, too) -- A. S. Tanenbaum, M. v. Steen, Distributed Systems

  • so, das problem hab ich schon gelöst. hier ist der script, wenn's irgendwen interessiert.
    jetzt kann ich schlafen gehen :zzz:

    The idea behind this technique is surprisingly simple: just go ahead and do whatever you want to without paying attention to what anybody else is doing. If there is a problem, worry about it later. (Many politicians use this algorithm, too) -- A. S. Tanenbaum, M. v. Steen, Distributed Systems

  • nur eine Anmerkung: dein Script funktioniert leider (und das ist so ne kleine Schwäche vom Shell-Script) nicht für Dateinamen mit Leerzeichen, da <space> als field seperator für die liste benutzt wird, die ls zurückliefert.
    selber kein shell script experte, kenn ich nur die triviale lösung mit
    $> for FILE # (für alle Argumente)
    und
    $> "$FILE" # (Anführungszeichen um die Argumente)
    im Body,
    Aufruf:
    $> imgren /mydir/*

    Oder mit Perl, da isses easy:

    Perl
    #!/usr/bin/perl
    my $counter = 0; my $dir = shift;
    opendir MYDIR, "$dir" or die "Can't open directory $dir: $!\n";
    my @files = readdir MYDIR;
    foreach (@files) {
        next if "$_" eq "$counter.jpg" || -d $_  || ! /\.jpg$/;
        $counter++ while -e "$counter.jpg";
        rename "$_","$counter.jpg" or die "Couldn't rename $_: $!\n";
    }    
    closedir MYDIR;


    (auch hier gehts sicherlich schöner)

    edit: ohne blöde klammern liest es sich gleich viel freundlicher

  • shabby: du hast vollkommen recht. ich bin auch schon am anfang draufgekommen dass es mit perl viel einfacher gehen sollte, aber da kenn ich mich überhaupt nicht aus.

    übrigens hab ich noch einen schlimmen bug entdeckt. da hab ich die verbesserte form.

    mfg

    The idea behind this technique is surprisingly simple: just go ahead and do whatever you want to without paying attention to what anybody else is doing. If there is a problem, worry about it later. (Many politicians use this algorithm, too) -- A. S. Tanenbaum, M. v. Steen, Distributed Systems

  • Die Standard-Lösung zum Umbenennen ist eine Pipe zu dem Programm xargs, geleitet über den Stream-Editor "sed" (damit kann man die Numerierung beibehalten). Etwa:

    ls *.jpg | sed -e p -e s/img// | xargs -n2 mv

    Ein "man sed" bzw. "man xargs" beschreibt die beiden Programme recht gut. Der Vorteil ist, dass man nicht auf eine bestimmte Shell angewiesen ist.

  • ich glaub dass auf dem gebiet noch viel zu lernen hab
    danke Spockman
    trotzdem bin ich froh, dass ich mein problem vollständig gelöst hab :D

    The idea behind this technique is surprisingly simple: just go ahead and do whatever you want to without paying attention to what anybody else is doing. If there is a problem, worry about it later. (Many politicians use this algorithm, too) -- A. S. Tanenbaum, M. v. Steen, Distributed Systems

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!