debitux Geschrieben 19. September 2002 Geschrieben 19. September 2002 Hi Leutz, wie kann ich in einem Shellskript Dateien ins aktuelle Datum (als Dateiname) umändern?
Schlaubi Geschrieben 19. September 2002 Geschrieben 19. September 2002 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?
debitux Geschrieben 19. September 2002 Autor Geschrieben 19. September 2002 Also ich hab nen Cronjob der kopiert immer aktuelle Dateien. Ich will die aber nicht überschreiben, sondern ins Datum umändern. In date +%D. :-)
debitux Geschrieben 19. September 2002 Autor Geschrieben 19. September 2002 das war genau das richtige. Jedoch wie ist die Variable für den mm/dd/jjjj auszugeben? Kenne mich mit dem awk nicht aus.
Schlaubi Geschrieben 19. September 2002 Geschrieben 19. September 2002 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?
DanielB Geschrieben 19. September 2002 Geschrieben 19. September 2002 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
debitux Geschrieben 20. September 2002 Autor Geschrieben 20. September 2002 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...
DanielB Geschrieben 21. September 2002 Geschrieben 21. September 2002 Poste doch mal die genaue Situation wofür du soetwas brauchst....
cwh Geschrieben 25. September 2002 Geschrieben 25. September 2002 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
Schlaubi Geschrieben 30. September 2002 Geschrieben 30. September 2002 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??
DevilDawn Geschrieben 30. September 2002 Geschrieben 30. September 2002 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.
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden