Veröffentlicht 19. September 200222 j Hi Leutz, wie kann ich in einem Shellskript Dateien ins aktuelle Datum (als Dateiname) umändern?
19. September 200222 j wie wärs mit dem Kommando 'touch' ? Beschreib bitte mal genauer, was du mit - "in Dateinamen umändern" meinst meinst du vielleicht sowas hier: ???? user@machine:~> datei=x; touch $datei; currenttimestamp=$(ls -l $datei | awk '{ print $8}'); mv $datei $currenttimestamp oder wie? ich versteh nicht ganz was du suchst?
19. September 200222 j Also ich hab nen Cronjob der kopiert immer aktuelle Dateien. Ich will die aber nicht überschreiben, sondern ins Datum umändern. In date +%D. :-)
19. September 200222 j das war genau das richtige. Jedoch wie ist die Variable für den mm/dd/jjjj auszugeben? Kenne mich mit dem awk nicht aus.
19. September 200222 j in $8 'befindet' sich der Wert 8ten Spalte, den 'ls -l' ausgibt; da du den Dateinamen noch mit angibst ist Zeile und Spalte genau definiert und der Wert in Feld '$8' wird in die Variable $8 gespeichert ich finde es nicht schlau dass du die Datei in dem Format "mm/dd/jj" angeben willst (date +%D), denn es kann auch sein dass sich Daten nicht nur einmal am Tag ändern sondern auch im Sekundentakt oder etwa nicht?
19. September 200222 j Hmm... Dateinamen die "/" enthalten sind glaube ich nicht wirklich gültig. Wir wäre es hiermit ? #!/bin/bash source="/tmp/foo" destination="/tmp/bar-`date +%D -r $source | sed -e 's#/#-#g'`" mv $source $destination
20. September 200222 j Wie siehts jedoch aus wenn mehrere Dateien im Verzeichnis sind? Da wäre doch ne while Schleife angebracht oder? Aber ich weiß nicht wie ich die Dateien hochzählen könnte...
25. September 200222 j Original geschrieben von MuhKuh Hi Leutz, wie kann ich in einem Shellskript Dateien ins aktuelle Datum (als Dateiname) umändern? Auf SuSE-Distris (ab welcher weiß ich nich, aber ab 7.3 bestimmt) gibt es ein kleines Shellscript namens "old", das macht z.B. sowas: fstab -> fstab-20020925 Das Script sieht so aus: #!/bin/bash # # This script simply renames files or directories to <name>-<date>[<num>] # # Copyright © 1996-2002 SuSE Linux AG, Nuernberg, Germany. # # please send bugfixes or comments to feedback@suse.de. # # # usage - tell user to use program # function usage() { echo usage: "$0" file\|dir [file\|dir ...] } if [ $# -eq 0 ] ; then usage exit fi DATESTRING=`date +"%Y%m%d"` for i in "$@" ; do i=${i%%/} if [ -e "$i" ] ; then NEWNAME=$i-$DATESTRING NUMBER=0 while [ -e "$NEWNAME" ] ; do NEWNAME=$i-$DATESTRING-$NUMBER let NUMBER=$NUMBER+1 done echo moving "$i" to "$NEWNAME" mv "$i" "$NEWNAME" else echo "$i" does not exist. fi done #-------------------------------------------- Ciao, Christopher
30. September 200222 j habs gerade ausprobiert (hab auch noch SuSE 7.3 am laufen ;-)) und das funzt einwandfrei. Wie wäre es nun mit diesem kleinen Helferlein und einer while Schleife, die sagen wir alle 5 sek. checkt, ob etwas Neues ins Verzeichnis gekommen ist, falls ja - dann mit old verwurstet und falls nichts Neues kam dann nix tut??
30. September 200222 j host:~/shelltest # ls -1 . .. bla.log foo.log mumpfpuffel.log test.sh host:~/shelltest # ./test.sh cp bla.log bla.log20020930-1421-1 cp foo.log foo.log20020930-1421-2 cp mumpfpuffel.log mumpfpuffel.log20020930-1421-3 Der Code dazu ist simpel: #!/bin/sh MYDATE=`date +%Y%m%d-%H%M` MYCOUNT=1 MYPATTERN='*.log' ls -1 ${MYPATTERN} | ( while read MYFILE do MYNEWFILE=${MYFILE}${MYDATE}-${MYCOUNT} echo cp $MYFILE $MYNEWFILE MYCOUNT=`expr $MYCOUNT + 1` done ) Wie man sieht echo'd das Script im Moment nur den Copy-Befehl.
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.