Hallo Liste. Ich muß hier von Zeit zu Zeit eine Datei eindeutig benennen, und möchte das per Skript so lösen, daß einfach eine fortlaufende Zahl vergeben wird, deren Länge sich aber nicht ändern darf. Das Vorgehen wäre also etwa: 1. Wert der letzten Benennung aus einer Datei holen, sagen wir "000012345" 2. Datei entsprechend benennen 3. Wert um eins erhöhen, hier also "000012346" 4. Diesen Wert in die Datei zurückschreiben. Vor allem Schritt 3 scheint mir problematisch wegen der führenden Nullen. Aber auch bei den anderen Schritten bin ich nicht ganz sicher, wie ich es lösen kann. Kann mir jemand ein paar Stichpunkte nennen? Danke+Gruß. Andy -- Antworten an lists@feile.net werden in /dev/null archiviert! Bitte ggf. lists... durch mail... ersetzen. Andreas Feile www.feile.net
On 2005-01-06 18:15:30 +0100, Andreas Feile wrote:
Kann mir jemand ein paar Stichpunkte nennen?
Lies http://kris.koehntopp.de/artikel/unix/shellprogrammierung/ Gruß Martin -- Martin Schröder, ms@artcom-gmbh.de ArtCom GmbH, Lise-Meitner-Str 5, 28359 Bremen, Germany Voice +49 421 20419-44 / Fax +49 421 20419-10 http://www.artcom-gmbh.de
Hallo Andreas, On Thu, Jan 06, 2005 at 06:15:30PM +0100, Andreas Feile wrote:
Ich muß hier von Zeit zu Zeit eine Datei eindeutig benennen, und möchte das per Skript so lösen, daß einfach eine fortlaufende Zahl vergeben wird, deren Länge sich aber nicht ändern darf. Das Vorgehen wäre also etwa:
1. Wert der letzten Benennung aus einer Datei holen, sagen wir "000012345" 2. Datei entsprechend benennen 3. Wert um eins erhöhen, hier also "000012346" 4. Diesen Wert in die Datei zurückschreiben.
Vor allem Schritt 3 scheint mir problematisch wegen der führenden Nullen. Aber auch bei den anderen Schritten bin ich nicht ganz sicher, wie ich es lösen kann.
Kann mir jemand ein paar Stichpunkte nennen?
mkdir ttt cd ttt touch 00000123 00000124 00000125 00000126 A=`ls -1 | tail -n 1 | sed 's/^0*//g'`; let A="$A+1"; N=`printf %8s $A | sed 's/ /0/g'`; touch $N obiges Bsp. holt den Namen direkt von einem Dateilisting. Das funktioniert aber nur unter bestimmten Bedingungen. Wenn du es wie du schreibst über eine Logdatei lösen willst dann tail -n 1 Logdatei und das ls -1 weglassen. Außerdem kannst du dann den Dateinamen ohne führende 0000 eintragen und dir das halbe sed Geraffel sparen. Greetings Daniel -- Real Life ist wie Windows, man weiß nie, was als nächstes schief geht....
Am Donnerstag, 6. Januar 2005 18:15 schrieb Andreas Feile:
Ich muß hier von Zeit zu Zeit eine Datei eindeutig benennen, und möchte das per Skript so lösen, daß einfach eine fortlaufende Zahl vergeben wird, deren Länge sich aber nicht ändern darf. Das Vorgehen wäre also etwa:
1. Wert der letzten Benennung aus einer Datei holen, sagen wir "000012345"
akt=`cat datei`
2. Datei entsprechend benennen
touch $akt # oder wie auch immer die Datei erzeugt wird
3. Wert um eins erhöhen, hier also "000012346"
neu=`printf "%9.9d" \`expr $akt + 1\``
4. Diesen Wert in die Datei zurückschreiben.
echo $neu >datei
Vor allem Schritt 3 scheint mir problematisch wegen der führenden Nullen. Aber auch bei den anderen Schritten bin ich nicht ganz sicher, wie ich es lösen kann.
Kann mir jemand ein paar Stichpunkte nennen?
Reichen die? ;-) Wichtig: Du musst natürlich die notwendigen Fehlersituationen abprüfen (numerischer Überlauf, Vorhandensein einer Datei mit Namen $akt, Initialisieren von datei mit einem Startwert, konkurrierender Zugriff mehrerer Prozesse auf datei, ...) Jan -- Linux-Quickies: http://www.jan-trippler.de PingoS: http://www.pingos.org
Hallo Jan, Hallo Liste. Jan Trippler, Donnerstag, 6. Januar 2005 19:28: [...]
Reichen die? ;-) [...]
Danke für die Hinweise, die ich hier bekommen hab. Aus allen Hinweisen zusammen inkl. eifrigen Nachschlagens bei kris.koehntopp.de habe ich mir jetzt ein nettes Skriptchen bauen können, das alles das tut, was es soll. Wieder mal viel gelernt. Gute Nacht. Andy -- Antworten an lists@feile.net werden in /dev/null archiviert! Bitte ggf. lists... durch mail... ersetzen. Andreas Feile www.feile.net
Am 01/06/2005 06:15 PM schrieb Andreas Feile:
Ich muß hier von Zeit zu Zeit eine Datei eindeutig benennen, und möchte das per Skript so lösen, daß einfach eine fortlaufende Zahl vergeben wird, deren Länge sich aber nicht ändern darf.
Wie wäre es, statt einer fortlaufenden Zahl einfach das aktuelle Datum zu nehmen in der Art JAHR-MONAT-TAG-STUNDE-MINUTE-SEKUNDE-NANOSEKUNDE? Das sollte auch (zumindest für den Hausgebrauch hinreichend) eindeutig sein und besitzt eine feste Länge, wenn Du mit führenden Nullen auffüllst. MfG, Michael.
participants (5)
-
Andreas Feile
-
Daniel Lord
-
Jan.Trippler@t-online.de
-
Martin Schröder
-
Michael Schachtebeck