lampux
Goto Top

Schleife für das Archivieren von Verzeichnissen mit Unrar-Rar (Shell)

Hallo zusammen,


ich habe bereits für das Entpacken eine Schleife geschrieben (in Shell): for f in *.rar;do unrar e -ad -o+ $f;done

Nun bräuchte ich für das Archivieren im Fomrat *.rar eine Schleife, die Ordnerstruktur sieht folgendermaßen aus:

In einem Verzeichnis test sind folgende Verzeichnisse z.B:

0015
Test0004
Baumfotos2010
KeineAhnung01
15

Diese Verzeichnisse sollten in *.rar Archive gepackt werden, also die Ausgabe sollte folgendes ausgeben:

0015.rar
Test0004.rar
Baumfotos2010.rar
KeineAhnung01.rar
15.rar

Die Parameter für das Packen von Rar-Archive sind: rar a [Ausgabedatei.rar] [~/Verzeichnis das hinzugefügt werden soll]

Könnt ihr mir viellecht eine Codelösung geben? face-smile

mfg Lampux

Content-ID: 153765

Url: https://administrator.de/contentid/153765

Ausgedruckt am: 05.11.2024 um 12:11 Uhr

micneu
micneu 27.10.2010 um 09:48:07 Uhr
Goto Top
z.b. ich würde mir erstmal eine liste mit den verzeichnissen erstellen die ich sichern will (ist die bekannt oder nicht?)
ich gehe davon aus die struktur ist dünamisch bis auf bis auf das hauptverzeichnis.

bei zum testen:

/tmp
find /tmp/* -type d > rar.txt          # erstellt mir eine text datei in meinem aktuellen verzeichnis mit den namen der verzeichnissen die in /tmp liegen.
diese kannst du jetzt mit einer for schleife abarbeiten

als beispiel so:

#!/bin/bash

### erstellt rar dateien aus den verzeichnissen

DATEI=rar.txt
ZAEHLER=1
DEST=/tmp/
for i in $(cat $DATEI); do
    echo $ZAEHLER $i
    echo rar a $i.rar $i
    ZAEHLER=$(($ZAEHLER+1))
    
done

ich lasse zum testen nur den befehl als echo ausgeben so kann ich sehen was er draus macht.
ich würde jetzt noch die ausgabe in eine art logdatei schreiben und so kann ich jeden tag sehen was gepackt wurde.
möchtest du noch ein anderes ziel verzeichnis haben so solltest du mit sed noch die path angaben anpassen.

das könnte man noch mit einbauen:

sed -e "s/\/*.\///g;s/\///g" rar.txt  
entfernt den path

also könnte man es so lösen

#!/bin/bash

### erstellt rar dateien aus den verzeichnissen

DATEI=rar.txt
ZAEHLER=1
DEST=/backup/
SOURCE=/tmp/*

find $SOURCE -type d > rar.txt 

for i in $(cat $DATEI); do
    echo $ZAEHLER $i
    b=`echo $i | sed -e "s/\/*.\///g;s/\///g"`  
    echo rar a $DEST$b.rar $i
    ZAEHLER=$(($ZAEHLER+1))
    
done
gruß michael
micneu
micneu 29.10.2010 um 20:33:10 Uhr
Goto Top
und hast du schon getestet?

gruß michael
micneu
micneu 20.04.2011 um 15:42:51 Uhr
Goto Top
Habe es nochmal etwas überarbeitet face-smile

#!/bin/bash

### erstellt rar dateien aus den verzeichnissen

ZAEHLER=1
DEST=/tmp
SOURCE=/var/

for i in $(find "$SOURCE" -maxdepth 1 -type d); do  
    echo $ZAEHLER $i
    b=`echo $i | sed -e "s/\///g"`  
    echo rar a $DEST/$b.rar $i
    ZAEHLER=$(($ZAEHLER+1))
done