Frage zu (g)awk - oder bash-script
Hallo *.* der Liste, Ich haabe hier ein kleines Problem, welches ich mittels awk oder shell-script lösen will - geht aber noch nich :*) lso, ich habe ein Shell-Script welches ein Backup ermöglichen soll (weiter unten) (Alles was für das Problem unnötig ist hab ich erst mal rausgelöscht, weil mit dem Script auch Datenbanken, Websites, Logdateien usw. gesichert werden...) In der Datei fulldir.conf stehen zum Beispiel die 2 Zeilen /usr/local/httpd /usr/local/ftp Nun möchte ich dass das Script mit dem Tar-Befehlt folgende 2 Archive anlegt (in /root/backupdata/backup$jetzt/fulldir/): httpd.tgz ftp.tgz wobei es den Namen vor dem Punkt aus dem Pfad extrahiert. Leider habe ich keine Shell-Funktion wie split oder explode gefunden, um den gewünschten String zu generieren. Mein Ansatz mit awk ist auch ab einem gewissen Punkt gescheitert, weil ich nicht rausbekommen habe, wie ich die Shellvariablen $backupdest und $backup_fulldir in awk importieren kann, um sie dort weiterzuverwenden. Der Ansatz folgt unter dem Shell-Skript... ---------------------------------------------------------------------------- Shell-Script zum Backup ---------------------------------------------------------------------------- #!/bin/bash #notwendige Variaben definieren jetzt=`date +"%Y%m%d_%H%M%S"` #Systemspezifische Einstellungen #wo liegt das Backup-programm backuproot='/root/backupscript' #wohin soll gesichert werden (muss existieren) backupdest='/root/backupdata' #welche Komplettverzeichnisse sichern backup_fulldir='/conf/fulldir.conf' #***Backupverzeichnisbaum generieren mkdir $backupdest/backup_$jetzt cd $backupdest/backup_$jetzt #Zeitstempel erzeugen echo \*Start des Backups `date +"%d.%m.%Y#%H:%M:%S"` > backup_$jetzt.log # Verzeicunis fuer Komplettverzeichnisse mkdir fulldir #**Sicherung der Komplettverzeichnisse ##echo Sicherung von Komplettverzeichnissen ##echo \*Sicherung von Komplettverzeichnissen `date +"%d.%m.%Y#%H:%M:%S"` >> bac cd fulldir for elementconf in `cat $backuproot/$backup_fulldir` do echo \-\>Sichere Konfiguration:$elementconf echo Sichere Konfiguration:$elementconf >> ../backup_$jetzt.log # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! # Hier ist mein Problem (in dieser Variante versucht er natürlich den kompletten # Pfad zu nehmen was ja nicht klappen kann, ich will aber ja auch # nur den letzten String der Pfadinformation... tar -czf $elementconf.tgz `cat $backuproot/conf/$elementconf.conf` echo Folgende Dateien/Ordener gesichert: >> ../backup_$jetzt.log cat $backuproot/conf/$elementconf.conf >> ../backup_$jetzt.log echo \ >> ../backup_$jetzt.log done ---------------------------------------------------------------------------- Der awk-Versuch ---------------------------------------------------------------------------- gawk -F'/' '{system(tar -czf ($backupdest/backup_$jetzt/fulldir/$NF ".tar.gz" $0))}' $backuproot/conf/fulldir.conf ---------------------------------------------------------------------------- $NF soll mir das letzte Feld und $0 die gesamte aktuelle Zeile verwerten. Bei /usr/local/httpd soll also rauskommen: Sicherung des Verzeichnises /usr/local/httpd (rekursiv natürlich) als Datei httpd.tar.gz ins Verzeichnis /root/backupdata/backup_$jetzt/fulldir ---------------------------------------------------------------------------- Kann mir da jemand auf die Sprünge helfen? Wer möchte kann dieses Scriptungetüm natürlich auch in voller Länge zugeschickt bekommen (für eigenen Bedarf) BTW: Frohes neues Jahr an alle! -- Mit freundlichem Gruß Thomas Albl Deutscher Städtetag Tel. : 0221/3771-210 FAX : 0221/3771-128 eMail: mailto:thomas.albl@staedtetag.de Web : http://www.staedtetag.de
Hallo, On Thu, 02 Jan 2003, Albl, Thomas wrote:
Hallo *.* der Liste, ^^^ *patsch* ein '*' reicht, wir sind hier doch nicht bei M$! ;)
In der Datei fulldir.conf stehen zum Beispiel die 2 Zeilen
/usr/local/httpd /usr/local/ftp
Nun möchte ich dass das Script mit dem Tar-Befehlt folgende 2 Archive anlegt
(in /root/backupdata/backup$jetzt/fulldir/): httpd.tgz ftp.tgz
wobei es den Namen vor dem Punkt aus dem Pfad extrahiert. Leider habe ich keine Shell-Funktion wie split oder explode gefunden, um den gewünschten String zu generieren.
man basename
Mein Ansatz mit awk ist auch ab einem gewissen Punkt gescheitert, weil ich nicht rausbekommen habe, wie ich die Shellvariablen $backupdest und $backup_fulldir in awk importieren kann, um sie dort weiterzuverwenden.
gawk --help | grep 'var' [..]
Shell-Script zum Backup ---------------------------------------------------------------------------- #!/bin/bash
#notwendige Variaben definieren jetzt=`date +"%Y%m%d_%H%M%S"` ^^ andersrum: date "+...". Besser aber gleich: jetzt="`date '+%Y...'`"
#***Backupverzeichnisbaum generieren mkdir $backupdest/backup_$jetzt cd $backupdest/backup_$jetzt
Autsch. Bitte quoten! "${backupdest}/backup_${jetzt}"
#Zeitstempel erzeugen echo \*Start des Backups `date +"%d.%m.%Y#%H:%M:%S"` > backup_$jetzt.log
s.o. echo "*Start des Backups `date '+%d.%m.%Y#%H:%M:%S'`" \ > "backup_${jetzt}.log"
for elementconf in `cat $backuproot/$backup_fulldir` do echo \-\>Sichere Konfiguration:$elementconf echo Sichere Konfiguration:$elementconf >> ../backup_$jetzt.log
dito. Quoten!
# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! # Hier ist mein Problem (in dieser Variante versucht er natürlich den kompletten # Pfad zu nehmen was ja nicht klappen kann, ich will aber ja auch # nur den letzten String der Pfadinformation...
tar -czf $elementconf.tgz `cat $backuproot/conf/$elementconf.conf`
e="`basename ${elementconf}`" tar -cz -T "${backuproot}/conf/${e}.conf" -f "${e}.tar.gz" Siehe tar --help und man tar.
echo Folgende Dateien/Ordener gesichert: >> ../backup_$jetzt.log cat $backuproot/conf/$elementconf.conf >> ../backup_$jetzt.log
Logikfehler. Du loggst so nur, welche Dateien gesichert werden _sollten_, nicht welche tatsaechlich gesichert wurden! Besser: tar -czv -T "${backuproot}/conf/${e}.conf" -f "${e}.tar.gz" 2>&1 \ >> ../backup_${jetzt}.log
echo \ >> ../backup_$jetzt.log
^^^ hae? Was soll das? einfach nur ne Leerzeile? Dann reicht ein simples 'echo >> datei'. -dnh -- 130: Open Source Support Support heißt Scheiße fressen und lächeln, nicht zurückscheissen. Also lächle und lang zu (es ist noch genug für alle da) oder geh weg. (Kristian Köhntopp)
participants (2)
-
Albl, Thomas
-
David Haller