Daten die älter sind verschieben

D

deamon89

hallo unixboard user,
ich hab mal ein problem mit shell skripten. Und zwar sollte ich ein kleines
skript schreiben dass alle Daten in einem Ordner die älter als 14 Tage sind
verschiebt. So weit so gut dass hier war jetzt erstmal meine lösung.
find /pfad -atime +14 -exec mv `{}´ /pfad2 \; hat auch funktioniert nur dann hab ich festgestellt dass ich die Informationen über das alter der Daten nicht auf Dateiebene habe sondern nur in form des dateinamens also z. B.
string-200805.01.dump.gz. Die frage ist jetzt was muss ich tun damit ich mit dem datum (Dateiname) im skript weiter arbeiten kann hab schon mit basename versucht das ende (dump.gz) abzuschneiden. Klappt aber nicht so ganz.
Danke schon mal im Vorraus
 
Dateinamen per RegEx zerschneiden und dann mit Hilfe der Shell die Datumsen vergleichen.
Das Zerschneiden würde ich beispielsweise mit `sed` oder `awk` vornehmen

Pro Dateiname
Zerschneide
Vergleiche Älter als 14 Tage
Verschiebe
/Vergleiche
/Pro

Easy wa? ;)
 
jo erstmal vielen danke für die schnelle antwort,
leider kenn ich mich net sehr gut aus mit awk (eigentlich überhaupt net).
könnte ich des dann so realisien im skript
ls | awk {befehle} so dass das skript jedes mal die dateinamen wieder zuschneidet?
 
Hallo

Zunächst auch hier wieder die Frage aller Fragen...

Mit GNU date einen Stichtag erstellen.
Wenn dein Dateiname sinnigerweise mit JahrMonatWochentag aufgebaut ist, lässt sich das sogar gut vergleichen.

Code:
STICHTAG=$(date -d"14 days ago" +"%Y%m%d")
FILE="string-200805.01.dump.gz";
ALTER=${FILE//[![:digit:]]/};
if [ "$ALTER" -lt "$STICHTAG" ]; 
   then
   echo "$FILE to old"
...
fi

Gilt für die Bash!
Sonst halt mit
Code:
ALTER=$(echo "string-200805.01.dump.gz"|tr -d -c "[:digit:]")

Gruß Wolfgang
 
Zuletzt bearbeitet:
Jawohl des hab ich jetzt voll vergessen, ich benutz ein suse linux, mit einer bash.
.
.
.
EDIT (autom. Beitragszusammenführung) :
.

Also erstmal danke für die Tipps hat gut funktioniert hier mal meine Lösung,
bei interesse:

Code:
#!/bin/bash
i=0
ALTER=unset
STICHTAG=$(date -d"14 days ago" +"%Y%m%d")

find /home/test/backup -name '*dump.gz' -print > log.dump

while read value
do
        echo $value
        ALTER=$(echo "$value"|tr -d -c "[:digit:]")

        if [ $ALTER -lt $STICHTAG ]
        then
                echo "Kopiere daten nach /home/test/backup2"
                mv $value /home/test/backup2

        else
                echo "Archiviere Daten weiter in /home/test/backup"
        fi
done < log.dump
 
Zuletzt bearbeitet von einem Moderator:
Würde es dir etwas ausmachen, künftig Programmcode in code-Tags zu fassen?
Das macht das Leben leichter. ;)

BTW hast du die Var STICHTAG nicht gesetzt.
Und log.dump kannst du dir sparen, wenn die Ausgabe von find via Pipe gleich in die while read geschoben wird.

Gruß Wolfgang
 

Ähnliche Themen

Autostart auf raspbmc

Last mit etc/passwd anzeigen lassen

Backup Skript automatisch ausführen mit udev

[RedHat] Seltsames Verhalten bei Cronjob... Hilfe!!

Umlaute und so umbenennen... - ntfs probleme?

Zurück
Oben