Backup Script Problem

kann ich irgendiwe noch hinzufügen das er Unterordner in jeder web*** Strucktur Bsp
/web11/logs /web11/apps /web12/logs / web12/apps usw auch ausschließt aber für alle webs?
 
dann macht er aba alles was logs und apps im Verzeichnis und in Unterordnern is weg will ja nur im web** verzeichnis die haben^^
 
Das kannst Du hier nachlesen:


Zu den Mustern("Patterns") hilft Dir der Befehl man:

Code:
man 7 glob

Tip: Du kannst die Muster auf den Pfad anwenden, so wie tar den verarbeitet. Wie sieht tar den Pfad? Führe dazu den tar - Befehl mal testweise aus:

Code:
tar -cf - verz1 verz2 >/dev/null

Der obige Befehl liest alle Dateien normal ein und schmeisst dann die Daten weg. Einziger Sinn davon ist hier, die Liste von Verzeichnissen und Dateien anzuzeigen, wie sie verarbeitet werden.
 
Last edited:
find statt * in der for verwenden
Der if lässt sich im find integrieren
/root/verzeichnisse.txt sieht nach zwei oder mehr Durchläufen lustig aus
 
Hi die verzeichnisse.txt lösche ich nach nach dem kompletten Durchlauf automatisch ;) somit keine Mehrfacheinträge.
Wie meinst du das mit dem find Befehl genau? meinst du einfach find /${verzeichnis}/apps usw ? Und wenn ja überspringen oder so? Hab da keien Idee zu. Evtl. kannst du das mal im Code oben einbetten?
 
Code:
for d in `find /path/to/ -type d -mindepth 1 -maxdepth 1 ! \( -iname "foo" -o -iname "bar" \) -print0 | xargs -0`; do
 
Der eigentliche Zusammenhang ergibt sich aus dem Script, daher nur eine grobe Übersetzung des find:
Code:
find /path/to/ -type d -mindepth 1 -maxdepth 1 ! \( -iname "foo" -o -iname "bar" \) -print0 | xargs -0
Finde in /path/to/ nur Verzeichnisse (-type d) die min/max (-mindepth 1 -maxdepth 1) eine Ebene tiefer liegen und nicht foo/Foo/FOo/... oder bar/bAr/baR/... (! \( -iname "foo" -o -iname "bar" \)) heissen und liste sie in einer einzelnen Zeile mit \0 als Trenner auf (-print0) und ersetze die \0 durch ein Leerzeichen (| xargs -0).
 
Ah ok danke. Ich habs nun bzgl. Auscshluss so gemacht indem ich einfach den Tar befehl erweitert habe um
Code:
tar czfv $FULLNAME ${verzeichnis}/htdocs
Damit spar ich mri das excluden. Soltle doch so auch passen oder?
Das find ist also nur eine andere Schreibweise für der for * korrekt?
 
Der * in Deinem for würde auch Files, Symlinks, Block/Characterdevices, Pipes und Sockets einschliessen, was durchaus sicherheitsrelevant werden kann. Daher beschränkt sich der find nur auf Verzeichnisse, was gemäss Deiner Variablenbenennung ohnehin so gewollt ist.

Zudem ist der find deutlich performanter und sicherer.
 
ok und schreibt er mir die auch in verzeichnisse.txt da ich damit ja arbeite? zb im tar Befehl?
Code derzeit so aber da fehlt ja noch das Verzeichnis listing..? Denn in /var/www/ liegen ja die ganzen web*** worin dann die htdocs sind die ich einzeln sichern möchte^^ Ode rmach ich einfach statt dem -print0 ein >> verzeichnisse.txt ?
Code:
#!/bin/sh

SUFFIX="tar.gz"
##DATE=`date +"%d.%m.%Y"`
DATE="30.05.2022"
#FULLNAME="$DATE.$SUFFIX"
# taegliche sicherung: 7days ago - 7 backups rueckhalt
# woechentliche sicherung: 21days ago - 3 backups rueckhalt
DELDATE=`date +"%d.%m.%Y" -d "21days ago"`
#DELFILE="$DELDATE.$SUFFIX"

cd /var/www

for d in `find /var/www/ -type d -mindepth 1 -maxdepth 1 ! \( -iname "html" -o -iname "webalizer" -o -iname "web_sqldumper" -o -iname "lost+found" \) -print0 | xargs -0`;
do
                echo "${verzeichnis}" >> /root/verzeichnisse.txt
                # backupt das verzeichnis
                FULLNAME="$DATE.${verzeichnis}.$SUFFIX"
                tar czfv $FULLNAME ${verzeichnis}/htdocs
                DELFILE="${DELDATE}.${verzeichnis}.$SUFFIX"

                # verzeichnistransfer auf den ftp
                lftp <<-SCRIPT
                set ftp:ssl-auth TLS
                set ssl:verify-certificate no
                open ftp://10.10.10.12:21
                user username passwort
                cd home
                rm $DELFILE
                put $FULLNAME
                exit
                SCRIPT

                rm -f $FULLNAME
done
rm /root/verzeichnisse.txt
 
Du arbeitest doch gar nicht mit der verzeichnisse.txt ;)

Hier mal das ganze Script:
Code:
#!/bin/sh

SUFFIX="tar.gz"
DATE=`date +"%d.%m.%Y"`
DELDATE=`date +"%d.%m.%Y" -d "21days ago"`

for d in `find /var/www/ -type d -mindepth 1 -maxdepth 1 ! \( -iname "html" -o -iname "webalizer" -o -iname "web_sqldumper" -o -iname "lost+found" \) -print0 | xargs -0`;
do
                FULLNAME="${DATE}.${d}.${SUFFIX}"
                tar czfv ${FULLNAME} ${d}/htdocs
                DELFILE="${DELDATE}.${d}.${SUFFIX}"

                lftp <<-SCRIPT
                set ftp:ssl-auth TLS
                set ssl:verify-certificate no
                open ftp://10.10.10.12:21
                user username passwort
                cd home
                rm ${DELFILE}
                put ${FULLNAME}
                exit
                SCRIPT

                rm -f ${FULLNAME}
done
 
aha ok verstanden, und wo sichert er das tar File hin bevor er es per FTP verschiebt. zuvor war es ja in /var/www und wo jetzt? sonst würde ich cd /var/www noch mit einbauen wieder davor
 
Back
Top