Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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?

Geschrieben

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?

Geschrieben

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

Geschrieben

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...

Geschrieben
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

Geschrieben

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??

Geschrieben


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.

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 erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...