Batch Unix Shell Script zum sichern & löschen von Dateien

Blackbenji

Lieutenant
Registriert
Nov. 2009
Beiträge
565
Hallo,

für unsere Firma suche ich ein Script (shell o. perl), welches:
1. Daten von a nach b kopiert, vorausgesetzt, die daten sind noch nicht vorhanden
2. daten die älter als 7 Tage sind löscht.

Das ganze soll als Cronjob jeden tag laufen.

Hat hier jemand eine idee, wie man das am besten umsetzen kann?
 
Zuletzt bearbeitet:
Eigentlich recht einfach, sofern bash_kenntnisse vorhanden sind.

Hab leider grad keine Zeit das alles zu schreiben, aber hier die Kurzanleitung:

#Dies prüft ob $FILE vorhanden ist, falls TRUE dann wird "DATEI EXISTIERT" ausgegeben
if [ -e "$FILE " ]
then
echo DATEI EXISTIERT
fi


Das mit dem Datum ist etwas komplizierter (zumindest fällt mir nix einfacheres ein):

#Dies liefert das modify date von $FILE
date -r $FILE

dann mit dem aktuellen Datum vergleichen und bei >7 Tagen entsprechend löschen lassen

Gruss
Lalas
 
Alte Dateien suchen ist mit find am einfachsten.
find <path> -type f -ctime +7 ... -exec rm -f {} \;
 
hmm letzteres finde ich sehr schön.

hab dazu mal versucht was zu bauen:

#!/bin/bash

DATE=`date +%Y_%m_%d`
BASE=/projekte/***/Daten


find "$BASE" -ctime +7 > "$DATE".txt
mail -s 'Old Files on /PROJEKTE/***/DATEN' -c email_fuer_cc email_empfaenger < "$DATE".txt

Ich kriege eine Liste von ewig vielen Daten.

Was mich wundert, wenn ich "-ctime +1" eingebe, wird die Datei größer als bei +7 ?

Bitte die roten *** ignorieren, sind Firmeninterne Daten.

nachtrag:

wie könnte ich die datei auslesen und daraus die files löschen?
&
wie stelle ich sicher, das keine daten gelöscht werden, die neu sind?
 
Zuletzt bearbeitet:
Du musst in einer Schleife alle einzelnen Dateien durchgehen. Ich kenne das Ausgabe-Format von dem find grad nicht (hab hier auf Arbeit kein Linux zur Hand).

Zum find noch zu sagen, dass es anscheinend Rundungsfehler geben kann. Also vlt. mal probieren mit "8" anstatt "7".

In deiner Datei sollten dann alle Dateien aufgelistet sein, welche innerhalb der letzten 7/8 Tage geändert wurden.
Diese Dateien per Schleife durchlaufen und einfach löschen anschliessend die neuen Dateien hinkopieren.
 
Das Format welches in der .txt gespeichert wird, sieht wie folgt aus:

/projekte/**/**/Caches/Sync/50400

Frage 1: wie lese ich die txt aus um sie dann in einer schleife zu verwenden ?
Frage 2: Kann ich die einträge zählen lassen und für den mailversandt reinschreiben? ich hab da an "Gesammte Dateien xx, Gelöschte Dateien xx" gedacht.
 
Datei zeilenweise durchlaufen geht so:

for i in $(cat $FILE); do

echo $i #$i enthält die aktuelle Zeile

done

Das mit zählen würde ich einfach im script einbauen. Jedesmal wenn eine Datei gelöscht wird einfach eine Variable inkremtieren.
Und die Gesamtanzahl der Dateien kannst Du ja am Anfang ermitteln.
Ergänzung ()

Mir kommt grad noch ein Gedanke, der eventuell viel Arbeit ersparen kann;

Es gibt beim copy-Befehl den flag -u

Der bewirkt, dass eine Datei nur dann kopiert wird, wenn das Ziel älter ist.

Also könntest Du mit:

cp -u $FILE $PATH

das eigentlich schon regeln.

Dann müsstest Du danach einfach nur noch alle Dateien älter 7 Tage löschen und fertig.
 
Zuletzt bearbeitet:
Zurück
Oben