Bilder fortlaufen nummerieren

B

Badtrain

Grünschnabel
Hallo.
Ich hab den Forum schon nach diesem Thema durchgesucht. Hab aus verschiedenen Varianten ein script zusammengebaut, der bei mir ums verrecken nicht funktioniert.

Ich möchte meine bilder dsc07373.jpg , dsc07374.jpg , dsc07375.jpg u.s.w
wie folgt umbenennen: 0001.jpg, 0002.jpg, 0003.jpg u.s.w

Das ist der script rename.sh:

Code:
#!/bin/bash

i=1
for File in "*.jpg";
do
i=$((i+1));# Hohzählen
mv $File 000$i.jpg
done

Beim Aufruf bekomme ich folgende Fehlermeldung:

mv: angegebenes Ziel „0002.jpg“ ist kein Verzeichnis

Wenn ich in folgender Zeile den Inhalt in Klammer setze:

Code:
mv "$File" "000$i.jpg"

Bekomme ich folgende Fehlermeldung:

mv: Aufruf von stat für „*.jpg“ nicht möglich: Datei oder Verzeichnis nicht gefunden

Was mach ich da Falsch ? Bin ein ziemlicher Anfänger und bin mit Debian unterwegs. Ich hoffe ihr könnt mir helfen.
Bitte kein neues scritp vorschlagen, sondern den ich vorgegeben hab abändern, wenns möglich ist. So kann ichs besser lernen.
 
Ich hab mir dazu damals dieses kleine Rubyskript geschrieben:
Code:
#!/usr/bin/ruby

require 'optparse'
Version = "0.9"
prefix = String.new

ARGV.options do |o|
        o.banner = "rename.rb [options] files"
        o.separator "renames files in the scheme: prefix_cnt.extension."
        o.separator "if no prefix is given, the scheme is cnt.extension."
        o.separator "existing files are overwritten."
        o.separator ""

        o.on '-p', '--prefix [PREFIX]', 'Prefix' do |pre|
                prefix = pre + "_"
        end

        o.on("-h", "--help", "This help" ) do
    puts o
    exit
  end  
   
  o.on_tail("--version", "Show version") do
   puts o.ver
   puts "Written by Johannes Held"
   puts ""
   puts "Copyright (C) 2007"
   puts "This is free software; see the source for copying conditions."
   puts "There is NO warranty; not even for MERCHANTABILITY or" 
   puts "FITNESS FOR A PARTICULAR PURPOSE."
   exit
 end 
end

begin
  ARGV.parse!
  
        if ARGV.size < 10
                renstr = "%s/%s%d%s"
        elsif ARGV.size < 100
                renstr = "%s/%s%.2d%s"
        elsif ARGV.size < 1000
                renstr = "%s/%s%.3d%s"
        else
                renstr = "%s/%s%.4d%s"
        end

        base = ""
        newname = ""
        cnt = 0
        ARGV.each do |fil|
                base = File.dirname fil
                newname = sprintf(renstr, base, prefix, cnt, File.extname(fil).downcase)
                File.rename(fil, newname)
                cnt += 1
        end
rescue => exc
  STDERR.puts "E: #{exc.message}"
  STDERR.puts ARGV.options
  exit 1
end
./rename.rb --help

Aber versuch es doch mal mit "for i in *.jpg"
 
Code:
#!/bin/bash

i=1
for File in $(ls *.jpg)
do
mv ${File} 000${i}.jpg
i=$((i+1));# Hochzählen
done
 
Zuletzt bearbeitet:
Code:
KRename

für nicht-KDE-System gibst bestimmt auch so gute Lösungen.
 
WOW. Vielen Dank. Es funktioniert ! :D

Hab das ganze jetzt einwenig erweitert.
Die Bilder werden jetzt wiefolgt umbenannt:

001.jpg
002.jpg
003.jpg
...
010.jpg
011.jpg

Also ab 10 verschwindet eine Null u.s.w.
Ist bei manchen PHP Bildergallerien hilfreich.

Code:
#!/bin/bash

i="1"
for File in $(ls *.jpg)
do
  if test ${i} -ge 100
    then mv ${File} ${i}.jpg
  elif test ${i} -ge 10
    then mv ${File} 0${i}.jpg
  else mv ${File} 00${i}.jpg
  fi
  i=$((i+1));# Hohzählen
done
 
Hallo
Du kannst auch printf verwenden.
Code:
i=0;
for File in $(ls *.jpg)
do
((i++));
mv $File $(printf "%04d.jpg " $i);
done
Das funktioniert hier bis 4 Stellen
Gruß Wolfgang
 
Wahnsinn wieviele möglichkeiten es gibt.
Des ist ja noch schlanker. Dankeschön ;)
 
Code:
perl -e 'system("mv ".quotemeta($_)." ".++$x.".jpg") for <*.jpg>'

Code:
count=1
for file in *jpg; do mv "$file" "$((count++)).jpg"; done
 
Zuletzt bearbeitet:
Hallo zusammen ...

Ich möchte mich hier mal einklinken!

Ich stehe vor der gleichen Aufgabenstellung und bekomme es einfach nicht gebacken ... :(
Die halbe Nacht habe ich mit den o.g. Scripts probiert und es klappt einfach nicht!

Also, ich habe und möchte:

* Files von meiner Webcam in einem Order "www/automower-webcam.com/UploadsOnBoard"
* Die Files haben folgende Bezeichnung "Alarm_2012-07-13_20-53-53_203.jpg"
* Es sind rund 2.500 file
* sie sollen per CronJob umbenannt werden in "Alarm0001.jpg" bis "Alarm2500.jpg"; natürlich in der richtigen Reihenfolge (siehe oben der Zeitstempel in den Filenamen!)
* entweder im gleichen Ordner, dann verschiebe ich sie im nächsten CronJob in einen neuen Ordner
* oder im gleichen Atemzug fertig umbenannt in einen neuen Ordner VERSCHOBEN werden

Hintergrund:
ffmpeg soll dann per CronJob daraus einen Film machen und benötigt fortlaufend nummerierte Dateinamen!

Vielen, vielen Danke!

Ich checks nicht, sorry! ;)

Nils
 
Hallo zusammen ...

Nach weiteren Stunden, hatte ich heute die Eingebung ;)
Ich habe endlich herausgefunden wo meine richtigen Pfadangaben hin müssen ...
War mir in den Script-Schnipseln nie klar :hilfe2: :think:

Aber nun ...! :brav:

x=1
for fname in pfad/pfad2/ordner/*.jpg
do
mv $fname `printf ausgabe-pfad/ausgabe-pfad2/ausgabe-ordner/BildnameNEU"%05d.jpg" $x`
x=$(($x+1))
done
 

Ähnliche Themen

Löschroutine mit Überprüfung

Image Resizer

Habe da ein Problem was nicht wegbekomme

grep und Variablen

Umlaute und so umbenennen... - ntfs probleme?

Zurück
Oben