Bash: Pfade verändern *gelöst*

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
v.errath@bcom.at
Beiträge: 18
Registriert: 22.02.2006 12:10:05

Bash: Pfade verändern *gelöst*

Beitrag von v.errath@bcom.at » 28.03.2006 11:39:05

Hallo an alle

Ich bastle gerade an einem Backup-Script für einen Root-Server bei Hetzner. Wir sichern mit rdiff-backup in einen lokalen Backup-Ordner. Dann erstellen wir mit duplicity von der Sicherung (ebenfalls in einem lokalen Ordner) komprimierte Dateien, die dann via rsync zu uns in die Firma gesendet werden.

Der Backupordner lautet "/backup". Der Duplicity-Ordner lautet "/backup_duplicity".
Ich suche mir alle gesicherten rdiff-backups so in eine Liste:

Code: Alles auswählen

for item in `find /backup -name "rdiff-backup-data"`;
    do
        # Zielverzeichniss checken und eventuell erstellen
        # Ideal wäre: Dabei den Ordner BACKUP durch BACKUP_DUPLICITY ersetzen

        ziel=/backup_duplicity`dirname $item`
        if ! [[ -d $ziel ]];
        then
            nice mkdir -p $ziel
            log "$ziel erstellt" "notime"
        fi

        # Backup mit duplicity "kopieren"
        log "--------------------------------------" "notime"
        log "Start duplicity "`dirname $item`

        nice duplicity \
             --no-encryption \
             --exclude $item \
             `dirname $item` \
             file://$ziel | tee -a $LOGFILE

        log "Ende duplicity "`dirname $item`
    done
Daas funzt zwar soweit, hat aber eine (zugegebenermaßen sehr kleinen) Nachteil. Die Duplicity-Files liegen dann in der Verzeichnissen z.B. "/backup_duplicity/backup/restlicher/pfad"

Kann ich irgendwie (siehe auch den Kommentar im Script) den gefundenen Pfad via Bash-Kommandos um den Ordner /backup verkürzen, oder irgendwie den Pfad in eine 2. variable kopieren und dort dann "backup" durch "backup_duplicity" ersetzen?
Zuletzt geändert von v.errath@bcom.at am 28.03.2006 14:33:41, insgesamt 1-mal geändert.

roli
Beiträge: 3174
Registriert: 10.09.2003 17:39:58

Beitrag von roli » 28.03.2006 12:13:27

Hi,

wenn ich erlich bin, habe ich noch nicht ganz verstanden was du wo durch was ersetzen willst. Da es sich aber um Strings handelt, die zu bearbeiten sind, bieten sich die ueblichen Verdaechtigen wie awk, sed, perl ... sicher dafuer an.
Roland


"Aber wenn du schon so unwissend bist, davon noch nicht gehört zu haben,
so will ich es doch als gut ansehen, daß du lieber einmal töricht fragst,
als weiterhin nichts von etwas zu wissen, das man doch wissen sollte."
aus "Die Edda des Snorri Sturluson", "Gylfis Täuschung"

Benutzeravatar
meandtheshell
Beiträge: 4054
Registriert: 14.01.2005 17:51:30

Beitrag von meandtheshell » 28.03.2006 12:46:54

@v.errath@bcom.at
Warum wählts du diese Lösung? IMHO wäre der Einsatz von http://dar.linux.free.fr/ eine sinnvollerer Lösung. Vieles was du so von Hand implementieren musst ist ein builtin feature von DAR.

- ssh tunnel
- versioning der versch. Versionen
- recovery
- etc.

markus

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

Beitrag von nepos » 28.03.2006 12:53:39

Schau dir mal die Bash-Manpage unter dem Punkt "Parameter Expansion" an.
Da gibt es die beiden Varianten

Code: Alles auswählen

${parameter%word}
und

Code: Alles auswählen

${parameter/pattern/string}
Damit sollte sich das realisieren lassen, ohne sed und Co nutzen zu muessen.
z.B.

Code: Alles auswählen

pfad=/irgendein/pfad/der/backup/enthaelt
echo ${pfad/backup/backup_duplicity}
--> /irgendein/pfad/der/backup_duplicity/enthaelt

v.errath@bcom.at
Beiträge: 18
Registriert: 22.02.2006 12:10:05

Beitrag von v.errath@bcom.at » 28.03.2006 14:33:16

"Parameter Expansion"
Suppi: Das wars!!

Besten Dank


P.S.: Das mit DAR werde ich mir mal beizeiten ansehen

Antworten