• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Ausgabe in Datei umlenken

Hi,

bei einfachen Befehlen ist mir die Vorgehensweise klar.
Code:
ls 2>&1 | tee file.txt" %
Ich baue mir gerade einen Backup-System zusammen. Dabei verwende ich tar und split und möchte die Ausgabe von tar in eine Datei speichern:
Code:
time tar -cvzf - ~/important_directory -X '~/excludes.txt' | split -b 2000m -d -a 3 - ~/backup/backup.tar.gz.
Wie kann ich hier 'tee' anbringen? Ich habs bisher noch nicht geschafft.

Grüße,
M.B.
 
A

Anonymous

Gast
Martin Baumann schrieb:
Ich baue mir gerade einen Backup-System zusammen. Dabei verwende ich tar und split und möchte die Ausgabe von tar in eine Datei speichern:

Welche Ausgabe, in deinem Befehl macht tar 2 Ausgaben, eine in die Pipe in richtung Split, und eine auf dem Fehlerkanal auf den Bildschirm.

Welche hättest du denn gerne in eine Datei geschrieben?
also willst du in der Datei die Dateinamen haben?
Code:
tar -cvzf -  Verzeichnis 2>logdatei | split
oder willst du mit einem Schlag 2 Backups machen ein komplettes und ein gesplittetes Archiv gleichzeitig erstellen?
Code:
tar -cvzf - Verzeichnis | tee gesamtarchiv.tgz  | split  ----  splitarchive.tgz
oder auch beides kombiniert ?
Code:
tar -cvzf - Verzeichnis  2>logdatei | tee gesamtarchiv.tgz  | split  ----  splitarchive.tgz

robi
 
Hi,

ersteres. Die Dateinamen sollen in einer Datei stehen. Allerdings sollen sie gleichzeitig in der Shell ausgegeben werden. Das würde ich mit
Code:
2>&1 | tee file.txt
machen, aber das klappt eben nicht. Mein aktueller Kandidat:
Code:
tar -cvzf - Verzeichnis 2>&1 | tee logfile.txt | split -b 100m -d -a 3 - ./backup.tar.gz.

Tschö,
M.B.
 
A

Anonymous

Gast
wenn du 2>&1 machst, dann mischt du die Daten vom Archiv mit den Dateinamen, raus kommt da nur Mist.
Code:
2>logdatei | split
Wenn du die Logs auf den Bildschirm und in eine Datei schreiben willst, dann musst du was anderes machen, entweder du arbeitest über eine named Pipe , oder du musst die Kanäle umbiegen bevor du tar startest. da es jetzt schon ziemlich spät ist nur ein ganz einfaches Beispiel
Code:
mkfifo /tmp/testpipe
tar -cvzf - verzeichnis 2>/tmp/testpipe | split    ..............  &
cat /tmp/testpipe | tee logdatei
rm /tmp/testpipe
Wichtig in diesem Beispiel, die gesamte tar-befehlzeile im Hintergrund laufen lassen, dort wird sie dann solange angehalten wie niemand aus /tmp/testpipe lesen will.


robi
 
Hallo Robi,


ich bau grad so was ähnliches und steh vor fast dem selben Problem...

Was bedeutet

Code:
tar -cvzf - verzeichnis 2>/tmp/testpipe | split    ..............  &
??


Ich möchte gerne ein größeres Verzeichniss /daten zippen und es dann über nfs von meinem Backupserver aufs Band schreiben lassen.
Das geht soweit auch alles nur beim zurückschreiben bricht mir das Band nach 2GB ab und tar sagt Datei Limit erreicht oder sowas.

Also wollte ich beim Zipfile schreiben die Zipdatei anschließend splitten - geht auch noch nur wenn ich dann noch die durch Zip geschriebenen Dateien in ein Log haben möchte dann gehts nicht mehr..

Hier mal mein jetziger Code:
Code:
zip -rv - /daten  > /var/log/makingzip.log | split -b 1073741824 - /tmp/streamer_file.zip

So schreibt zip in das makingzip.log und das streamer_file.zip wird nicht erstellt

Irgend eine Idee? oder hast Du vielleicht nen besseren Weg...?
 
A

Anonymous

Gast
rotzloeffel schrieb:
Hier mal mein jetziger Code:
Code:
zip -rv - /daten  > /var/log/makingzip.log | split -b 1073741824 - /tmp/streamer_file.zip
Bessere Wege kenn ich viele. Jetzt ohne groß deine Befehlskette zu überprüfen sieht es so aus, als hättest du einen ähnlichen Denkfehler in deiner Kommandozeile wie oben in der Ausgangsfrage.
* Auf der Standardausgabe kommt das Datenarchiv, das muss über die Pipe
* Auf dem Standardfehlerkanal kommen die Logdaten, die müssen in die Logdatei.
* Beide Kanäle dürfen auf keinem Fall gemischt werden.

Probier mal
Code:
zip -rv - /daten  2>/var/log/makingzip.log | split -b 1073741824 - /tmp/streamer_file.zip

robi
 
robi schrieb:
rotzloeffel schrieb:
Hier mal mein jetziger Code:
Code:
zip -rv - /daten  > /var/log/makingzip.log | split -b 1073741824 - /tmp/streamer_file.zip
Bessere Wege kenn ich viele. Jetzt ohne groß deine Befehlskette zu überprüfen sieht es so aus, als hättest du einen ähnlichen Denkfehler in deiner Kommandozeile wie oben in der Ausgangsfrage.
* Auf der Standardausgabe kommt das Datenarchiv, das muss über die Pipe
* Auf dem Standardfehlerkanal kommen die Logdaten, die müssen in die Logdatei.
* Beide Kanäle dürfen auf keinem Fall gemischt werden.

Probier mal
Code:
zip -rv - /daten  2>/var/log/makingzip.log | split -b 1073741824 - /tmp/streamer_file.zip

robi

Vielen Dank, genau das wars.
Mit dem 2> spreche ich also den Fehlerkanal an !?
Und die Standardausgabe geht nach wie vor in die Pipe...

Kann man sich also so merken.

Grüßle aus dem Schwarzwald

Rotzlöffel
 
Hi Robi,

nochmal kurz ne Frage - ich habe grad gelesen das ich über rsh auch ein entferntes Bandlaufwerk ansprechen kann.
die Rsh verbindung klappt soweit nur bekomme ich die Daten über die pipe nicht auf den anderen Rechner und auch nicht zurück.

Die Idee ist irgendwie sowas...

zum schreiben
Code:
tar cfv - /daten | rsh backup@192.168.5.3 "- /dev/st0"

und zum lesen
Code:
rsh backup@192.168.5.3 "tar xvf -" | - > /daten/ruecksichern/

irgendwas fehlt da noch...

Grüßle Oli
 
A

Anonymous

Gast
rotzloeffel schrieb:
Die Idee ist irgendwie sowas...
zum schreiben
Code:
tar cfv - /daten | rsh backup@192.168.5.3 "- /dev/st0"
Schau mal in diesen Wikibeitrag, da ist ein ganz einfaches Beispiel mit ssh drin wie man sein Laufwerk über Rechnergrenzen nutzen kann, einfach ssh durch rsh ersetzten wenn du rsh in einem geschlossenen Netz nutzen kannst und willst, rsh ist hier einiges schneller weil eben keine Verschlüsselung genutzt wird, dafür aber auch entsprechend unsicher.
http://wiki.linux-club.de/opensuse/Dd#mit_dd_.C3.BCber_Rechnergrenzen


robi
 
Oben