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? Zitieren
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? Zitieren
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. :-) Zitieren
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. Zitieren
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? Zitieren
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 Zitieren
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... Zitieren
DanielB Geschrieben 21. September 2002 Geschrieben 21. September 2002 Poste doch mal die genaue Situation wofür du soetwas brauchst.... Zitieren
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 Zitieren
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?? Zitieren
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. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.