Files nach Datum umbenennen

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
t2x
Beiträge: 24
Registriert: 19.07.2003 12:46:57

Files nach Datum umbenennen

Beitrag von t2x » 20.02.2005 15:11:55

Hi,

ich habe mal wieder ein kleines Problem das ich gerne mit einem Script loesen wuerde.

Ich hab einen Ordner mit in dem schon ein Haufen an Bildern liegen die mit einer 5stelligen Zahl beginnen. Diese Nummerierung bezieht sich rein auf das Datum der Dateien.
Die Files die schon eine Nummerierung haben sollen nicht beruecksichtigt werden. Alle neuen Dateien sollen an diese Nummerierung angepasst werden.
Die letzte Zahl bekomme ich ja mit

Code: Alles auswählen

last=`ls -1At *.jpeg| grep -E ^[0-9]{5} | sed -e "s|\(^.....\).*|\1|g" |head -1`
So jetzt kommt aber mein eigentliches Problem Ich brauche nun alle jpeg Dateien (die auch leerzeichen enthalten koenne) und mit keiner 5 stelligen Ziffer anfangen und moechte die nach dem Datum mit last+1, last+2 usw. nummerieren und an dieser Schleife haenge ich, da ich mit den bloeden Leerzeilen nicht hinkomme.

Koennte mir da bitte einer weiterhelfen.

Danke
t2x

Benutzeravatar
Joghurt
Beiträge: 5244
Registriert: 30.01.2003 15:27:31
Wohnort: Hamburg
Kontaktdaten:

Beitrag von Joghurt » 20.02.2005 16:31:10

Ich gehe jetzt mal davon aus, das die 1.Ziffer zumindest eine 1 ist (also nicht LAST=00201 ist) (ungetestet)

Code: Alles auswählen

ls | while read name; do
#bash-Syntax!
  if grep -qE ^[0-9]{5} <<<"$name"; then continue; fi
  mv "$name" "$LAST$name"
  LAST=$(($LAST+1))
done

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 20.02.2005 17:27:55

"...| while read file; do ... done" liest immer eine Zeile, daher werden Leerzeichen korrekt interpretiert


Bei der Initialisierung von lastnr habe ich sicherheitshabler die führenden 0 weggeschnitten, damit nicht irrtümlich mit Oktalzahlen gerechnet wird. Keine Ahnung ob das für dich wichtig ist.

Code: Alles auswählen

#!/bin/bash

lastnr=`ls -1At *.jpeg| grep -E ^[0-9]{5} | sed -e "s|^\(.....\).*|\1|" -e "s|^0*||" |head -1`
[ -n "$lastnr" ] || lastnr=0
ls -1t *.jpeg | grep -Ev ^[0-9]{5} | while read file; do 
  lastnr=$(($lastnr+1))
  prefix=`printf "%05d" $lastnr`
  echo mv "$file" $prefix.jpeg
done
[edit]
ich war zwischendurch mit meinem Hund unterwegs, habe danach vergessen auf refresh zu drücken und daher nicht gesehen, daß schon geantwortet wurde
[edit]

Antworten