Alter einer Datei mit Skript abfragen

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
chr.strins
Beiträge: 83
Registriert: 20.02.2003 18:21:11

Alter einer Datei mit Skript abfragen

Beitrag von chr.strins » 18.02.2009 18:24:03

Hallo,
ich bin dabei ein Backup-Skript mit der Bash zu schreiben. Dabei möchte ich zwei Backup-Versionen haben, die im Ordner A bzw. B gespeichert werden.
Mein Skriptcode unten überprüft dabei, welche Version des Backups älter ist und führt ein Backup in dem Ordner der älteren Version durch.
Zusätzlich möchte ich jetzt eine Abfrage einbauen, mit der es möglich ist, das Backup nur auszuführen wenn das letzte Backup mindestens z.B. eine Woche her ist.
Ich möchte so umgehen, dass ich zwei fast identische Versionen des Backups habe. Vllt. kann mir ja jemand helfen.
Gruß Christoph

Code: Alles auswählen

function backup {
  local mainbackupdir=/backup
  local A=$mainbackupdir/A
  local B=$mainbackupdir/B
  if [ $A -nt $B ]
    then
    local backupdir=$mainbackupdir/B
    elif [ $B -nt $A ]
      then
      local backupdir=$mainbackupdir/A
    else
    exit 1
  fi
  rsync -aRv --delete --progress zu_sichernde_verzeichnisse $backupdir
}

nepos
Beiträge: 5238
Registriert: 05.01.2005 10:08:12

Re: Alter einer Datei mit Skript abfragen

Beitrag von nepos » 19.02.2009 08:40:36

An das Alter der Datei kannst du mittels stat gelangen.
Z.B. das Datum der letzten Modifikation der Datei als UNIX-Timestamp:

Code: Alles auswählen

stat --printf "%Y" <datei>
Schau einfach mal in die Manpage zu stat!

uname
Beiträge: 12426
Registriert: 03.06.2008 09:33:02

Re: Alter einer Datei mit Skript abfragen

Beitrag von uname » 19.02.2009 08:53:39

Ein kleiner Tipp am Rande. Um das Backup zu beschleunigen kannst du dir den Parameter:

Code: Alles auswählen

--link-dest
von rsync anschauen. Er ermöglicht inkrementelle Backups, da Hardlinks bezogen auf Dateien in dem genannten Verzeichnis gesetzt werden.
Solange du deine zwei Backups sowieso auf nur einer Partition liegen hast kannst du nämlich auch Hardlinks auf die Dateien nutzen. Somit brauchst du bei zwei Backupordnern nur ca. die Hälfte an Platz. Und nein, das ist kein Sicherheitsrisiko. Ich fertige im übrigen jeden Tag einen neuen Ordner an, der dann nur inkrementell die Änderungen enthält. Sämtliche andere Dateien sind nur Hardlinks und benötigen bis auf Verzeichniseinträge kein Platz.

http://wiki.ubuntuusers.de/Skripte/Backup_mit_RSYNC

Benutzeravatar
chr.strins
Beiträge: 83
Registriert: 20.02.2003 18:21:11

Re: Alter einer Datei mit Skript abfragen

Beitrag von chr.strins » 19.02.2009 11:54:22

Das mit "stat" hab ich jetzt so hinbekommen. Ist ja eigentlich ganz einfach. Jetzt weiß ich auch, was ein UNIX-Timestamp ist. :D
Das mit den Hardlinks werd ich mir dann auch nochmal anschauen. Dann bräuchte ich ja eigentlich meine Abfrage, ob das zu überschreibende Backup schon alt genug ist, gar nicht mehr;)
Danke für eure Hinweise!

uname
Beiträge: 12426
Registriert: 03.06.2008 09:33:02

Re: Alter einer Datei mit Skript abfragen

Beitrag von uname » 19.02.2009 12:46:32

Dann bräuchte ich ja eigentlich meine Abfrage, ob das zu überschreibende Backup schon alt genug ist, gar nicht mehr;)
Genau. Im Normalfall läßt man dann z.B. 10 Generationen einfach durchrotieren und fertig. Ich für meinen Fall lege pro Tag einen Ordner an und lösche lieber manuell, da ich mal mit einer Rotation etwas Ärger hatte ;-) Bei Systemordnern wie / oder /etc ist der Datenzuwachs im übrigen fast gleich Null. Bei /home oder /var sieht es evtl. anders aus.

Benutzeravatar
chr.strins
Beiträge: 83
Registriert: 20.02.2003 18:21:11

Re: Alter einer Datei mit Skript abfragen

Beitrag von chr.strins » 19.02.2009 16:37:13

Zu den Hardlinks hab ich jetzt noch ein paar Verständnisfragen:
Angenommen ich habe 1 Backupversion eines Ordners mit 10 Dateien. Nun lege ich eine zweite Backupversion an. Da der Inhalt sich nicht geändert hat, werden Hardlinks gesetzt.
Nun lege ich eine dritte Version des Backups an, wiederum hat sich der Inhalt nicht geändert und es werden Hardlinks zu den Hardlinks der zweiten Version, die auf die erste Version verweisen, angelegt. Kann man das so sagen?

Was passiert jetzt aber, wenn ich die zweite Backupversion löschen würde? Verweisen dann die Hardlinks der dritten Version ins Leere?
Was passiert, wenn ich die ersten beiden Backupversionen löschen würde? Werden die Hardlinks in der dritten Backupversion dann zu echten Dateien?

Antworten