Liste von Ordnern in Shell Script einlesen

Hallo,

ich möchte die Ordner in einem bestimmten Verzeichnis einlesen und in einer Schleife durchgehen.
Ich stelle mir das irgendwie so vor:

for Ordner in /irgendwo/
do
tar -cvzf ziel.tar /irgendwo/Ordner/
done

da ich leider von Shellscripting noch wenig Ahnung habe, fehlt mir einfach die passende Syntax

for Ordner in /irgendwo/
do
tar -cvzf ziel.tar /irgendwo/Ordner/
done

Damit überschreibst du mit jedem Durchgang immer dasselbe Ziel. Worum geht es dir überhaupt - willst du für jeden Ordner ein eigenes Archiv? Ansonsten wäre
‚tar -cvzf ziel.tgz /irgendwo/‘ ausreichend, da tar rekursiv arbeitet.

Gruß

Es geht darum, dass ein Backup von jedem Tag der Woche erstellt wird.
Mit ging es um die Lösung, wie ich die Verzeichnisse in die Schleife bekomme.
Ich hab es jetzt so gelöst:

Tag=date '+%w'
for Ordner in ls /irgendwo/
do
tar -cvzf ziel$Tag.tar /irgendwo/Ordner/
done

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

for Ordner in ls /irgendwo/

Was spricht gegen „for Ordner in /irgendwo/*“?

Viele Grüße,
Sebastian

Hallo 151kg,
hast Du dein Skript tatsächlich überprüft?
Wie herrmann schon schrieb, tar ist von Natur schon rekursiv, so daß z.B. so etwas reichen würde (jetzt noch ohne jegliche Fehlerprüfung):

#!/bin/bash
ORDNER=$1
TAG=ziel`date +%w`.tgz
tar -cvzf $TAG $ORDNER

Wenn Du das unter dem Namen backup abspeicherst und dann mit ./backup /irgendwas aufrufst, sicherst Du den Inhalt sämtlicher Ordner und Unterordner ab /irgendwas.
Willst Du nur den Inhalt von /irgendwas (ohne Unterordner) sichern, müsste das so aussehen:

#!/bin/bash
ORDNER=$1
TAG=ziel`date +%w`.tgz
tar --no-recursion -cvzf $TAG $ORDNER/\*

Als halbwegs vernünftiges Backup müsste natürlich noch mehr rein, soll ja nur das Grundgerüst verdeutlichen.

Viele Grüße
Marvin

for Ordner in ls /irgendwo/

Was spricht gegen „for Ordner in /irgendwo/*“?

Eigentlich nur, dass ich nicht wusste, dass es geht :smile:

Danke

for Ordner in ls /irgendwo/

Was spricht gegen „for Ordner in /irgendwo/*“?

Eigentlich nur, dass ich nicht wusste, dass es geht :smile:

Und das es ein anderes Ergebnis liefert!

Bei meiner Variante bekomme ich in die Variable Ordner die reinen Ordnernamen, bei Deiner den kompletten Pfad zum Ordner.

Und da ich den Ordnernamen alleine weiterbenutzten will, denke ich, das meine Variante passender ist.

Trotzdem vielen Dank

da ich für alle vorhanden Ordner ein eigenes Archiv brauche, muß ich den Überordner einzeln durchgehen.

Hallo 151kg,

da ich für alle vorhanden Ordner ein eigenes Archiv brauche,
muß ich den Überordner einzeln durchgehen.

Abgesehen davon, daß dein Skript so nicht funktioniert, legst Du auch nur ein einziges Archiv an, nämlich zielX.tar.
Willst Du vielleicht für den Ordner irgendwo ein Archiv irgendwo.tar.gz anlegen und für das Verzeichnis woanders ein Archiv woanders.tar.gz?
Und sollen die Unterordner von irgendwo auch ein eigenes Archiv bekommen, und wie soll das denn heissen, irgendwo/unterordner.tar.gz geht ja schlecht als Name für das tar-Archiv des Ordners /irgendwo/unterordner.
So ganz ist mir das Konzept noch nicht klar und wozu Du für jeden Ordner ein eigenes Archiv brauchst?

Viele Grüße
Marvin

Bei meiner Variante bekomme ich in die Variable Ordner die
reinen Ordnernamen, bei Deiner den kompletten Pfad zum Ordner.

Und da ich den Ordnernamen alleine weiterbenutzten will, denke
ich, das meine Variante passender ist.

Ich würd’s vermutlich so in der Art machen:

backupdir=pwd
cd /irgendwo
for a in *; do
tar czvf $backupdir/$a_$tag.tar.gz $a
done

Der Vorteil wäre, dass die Pfade der Dateien in den tar-Dateien dann relativ abgelegt sind ($a/…) und nicht vom root-Verzeichnis an. Das kann von Vorteil sein, wenn ich das tar mal woandershin auspacken möchte.

Und wenn ich’s ein bisschen cooler machen wollen würde, würde ich für jedes $a überprüfen, ob es überhaupt ein Verzeichnis ist, und nur in dem Fall tarren :smile::

if [-d $a]; then

fi

Viele Grüße,
Sebastian

Danke, das Problem ist gelöst k.t.
wirklich kein Text :smile: