Seite 1 von 2

Archiv Erzeugen

Verfasst: Samstag 30. August 2008, 00:30
von Laines
Hallo ich habe Einen Ordner den ich gerne in ein tar.gz Archiv sichern würde. In ihm sind Dateien und Unterordner.

Beispiel:
/home/user/stuff/
Unter stuff währen Jetzt weitere Unterordner und Dateien. Ich möchte es so haben, das alles ab dem Ordner stuff im Archiv ist. Die Verzeichnisstruktur ab Stuff soll aber weiterhin im Archiv vorhanden sein. Bisher schaffe ich es leider nur das er Absolute Pfade im Archiv sichert, also auch /home/user/stuff/

Verfasst: Samstag 30. August 2008, 01:20
von veers
cd dir; tar cf test.tar subdir?

Verfasst: Samstag 30. August 2008, 01:42
von Laines
Das sind ja linux comands, ich wollte das mit python syntax machen...

Verfasst: Samstag 30. August 2008, 05:42
von numerix
Laines hat geschrieben:Das sind ja linux comands, ich wollte das mit python syntax machen...
Du kannst doch diese Kommandos aus einem Python-Skript heraus aufrufen ...

Guckst du hier: http://docs.python.org/lib/module-subprocess.html

Verfasst: Samstag 30. August 2008, 07:37
von kaschu
Laines hat geschrieben:Das sind ja linux comands, ich wollte das mit python syntax machen...
dann helfen Dir: os.chdir() und tarfile.open().
Damit kannst Du den Vorschlag von veers in Python umsetzen.

Gruß
kaschu

Verfasst: Samstag 30. August 2008, 11:09
von lunar
In Python braucht es den Wechsel des Arbeitsverzeichnisses nicht.

Verfasst: Samstag 30. August 2008, 11:16
von name
Ich würde dir abraten die Commands einfach aus dem Script auszurufen.
Nimm lieber das tarfile Modul. Die Examples in der Dokumentation sollten eigentlich reichen.

Verfasst: Samstag 30. August 2008, 14:41
von Laines
Ich habe auch bisher mit dem tarfile Modul gearbeitet. Könnte mir jemand den Code Posten ich bekomme das genau so wie ich es will leider nicht selbst hin...
Bisher schaffe ich es leider nur das er Absolute Pfade im Archiv sichert, also auch /home/user/stuff/

Verfasst: Samstag 30. August 2008, 14:55
von lunar
Zeig uns deinen Code, und wir sagen dir, was falsch läuft ...

Verfasst: Samstag 30. August 2008, 16:36
von veers
name hat geschrieben:Ich würde dir abraten die Commands einfach aus dem Script auszurufen.
Wieso? Wenn sauber gemacht ist das imho eine saubere Lösung ;)

Verfasst: Samstag 30. August 2008, 17:06
von lunar
veers hat geschrieben:
name hat geschrieben:Ich würde dir abraten die Commands einfach aus dem Script auszurufen.
Wieso?
Windows ... das hat weder ein "tar" Kommando. Außerdem ist unter Windows nicht notwendigerweise jedes Programm auch im $PATH.

Und auch unter Linux/Unix muss man sich dann mit leidigen Kompatibilitätsproblemen rumschlagen. GNUs gibts nämlich auch nicht überall ...

Wenn es ein Modul gibt, dann sollte man das auch nutzen.

Verfasst: Samstag 30. August 2008, 18:06
von veers
lunar hat geschrieben:
veers hat geschrieben:
name hat geschrieben:Ich würde dir abraten die Commands einfach aus dem Script auszurufen.
Wieso?
Windows ... das hat weder ein "tar" Kommando. Außerdem ist unter Windows nicht notwendigerweise jedes Programm auch im $PATH.

Und auch unter Linux/Unix muss man sich dann mit leidigen Kompatibilitätsproblemen rumschlagen. GNUs gibts nämlich auch nicht überall ...

Wenn es ein Modul gibt, dann sollte man das auch nutzen.
Unter windows könnte man ja eine tar.exe mitliefern ;)

Verfasst: Samstag 30. August 2008, 21:33
von Leonidas
veers hat geschrieben:Unter windows könnte man ja eine tar.exe mitliefern ;)
Ist die Frage warum man das machen sollte, wenn der Tar-Code schon vom Python-Interpreter mitgebracht wird. :twisted:

Verfasst: Samstag 30. August 2008, 21:43
von name
veers hat geschrieben:
name hat geschrieben:Ich würde dir abraten die Commands einfach aus dem Script auszurufen.
Wieso? Wenn sauber gemacht ist das imho eine saubere Lösung ;)
Es ist nie eine saubere Lösung auf externe Kommandos angewiesen zu sein. Überhaupt wenns eh built-in ist.

Verfasst: Samstag 30. August 2008, 22:21
von Leonidas
name hat geschrieben:Es ist nie eine saubere Lösung auf externe Kommandos angewiesen zu sein.
Naja, so darf man es nicht sehen. Zum Beispiel pings absetzen würde ich auch eher über das System-Ping als selbst die Pakete zu schicken, da man für solche Kommunkation root-Rechte braucht und darum ping auch setsuid ist. Ich würde es eher vermeiden wollen, dass jemand mein Python-Programm mit root-Rechten starten müsste.

Verfasst: Sonntag 31. August 2008, 21:43
von Laines
Hier mal was ich bisher habe:

Code: Alles auswählen

			dateien = os.listdir(UserOrdner)
			for i in dateien:
				ZuAdden = UserOrdner + "/" + i
				tar.add(ZuAdden)
			tar.close()
# UserOrdner ist der Absolute Pfad bis zu dem Ordner der gesichert werden soll

Verfasst: Sonntag 31. August 2008, 22:12
von veers
name hat geschrieben:
veers hat geschrieben:
name hat geschrieben:Ich würde dir abraten die Commands einfach aus dem Script auszurufen.
Wieso? Wenn sauber gemacht ist das imho eine saubere Lösung ;)
Es ist nie eine saubere Lösung auf externe Kommandos angewiesen zu sein. Überhaupt wenns eh built-in ist.
Aha. Dann ist git also eine ganz unsaubere Lösung. Genauso wie tar, ssh und der gcc sowie eigentlich Unix selbst? Ich seh das anders...

Verfasst: Sonntag 31. August 2008, 23:35
von BlackJack
@veers: Das ``git`` unschön ist sieht man, wenn man das mal in einer nicht typischen Unix-Umgebung braucht.

Wie ``tar``, ``ssh`` und ``gcc`` da jetzt ins Bild passen sollten, erschliesst sich mir nur bedingt. Der ``gcc`` ruft ja eigentlich nur externe Programme auf, die er sehr genau kennt, weil sie zum gleichen Programmpaket gehören. Und "Unix selbst", ja die meisten Shell-Skripte sind ziemlich unsauber. Es werden bestimmte Features von Shell und aufgerufenden Programmen erwartet, zum Beispiel im Linuxbereich, dass die ``bash`` verwendet wird und die GNU-Varianten der üblichen Programme installiert sind. Das Dateinamen mit Leerzeichen mit sehr vielen Skripten Probleme bereiten ist ja nun auch legendär.

Verfasst: Sonntag 31. August 2008, 23:39
von Leonidas
veers hat geschrieben:Aha. Dann ist git also eine ganz unsaubere Lösung. Genauso wie tar, ssh und der gcc sowie eigentlich Unix selbst? Ich seh das anders...
Tar nutzt bis auf Kompression (sofern gewollt) keine externen Befehle, ssh nutzt auch wohl bis auf sh keine externen Sachen, gcc nutzt häuptsächlich die binutils, die auch von GNU kommen. Ich glaube es ging darum, dass es wenig elegant ist auf externe Programme zuzugreifen, die noch dazu je nach GNU/BSD/POSIX-Userland verschieden funktionieren, wenn die Stdlib so etwas bereits mitbringt.

git ist da etwas anders, aber auch das wird immer mehr in C neugeschrieben. Der Perl-Teil... ok, Perl ist Shellskript mit sed und awk als Endosymbionten :)

Verfasst: Sonntag 31. August 2008, 23:53
von veers
Leonidas hat geschrieben:
veers hat geschrieben:Aha. Dann ist git also eine ganz unsaubere Lösung. Genauso wie tar, ssh und der gcc sowie eigentlich Unix selbst? Ich seh das anders...
Ich glaube es ging darum, dass es wenig elegant ist auf externe Programme zuzugreifen, die noch dazu je nach GNU/BSD/POSIX-Userland verschieden funktionieren, wenn die Stdlib so etwas bereits mitbringt.
Klar, in dem Falle lässt es sich vermutlich mit der Tarlib wirklich schöner lösen. Mir ging es eher ums "Es ist nie eine saubere Lösung auf externe Kommandos angewiesen zu sein". Ich halte Argumente und Pipes sehr wohl als valides Interface zwischen Programmen. Es mag nicht so ein tolles Buzzword sein wie SOAP (welches ja seine eigenen Probleme hat) oder REST es erfüllt seinen Zweck aber relativ gut ;)

Blackjack,
Ich frage mich da ob das git unschön macht. Git wurde für Unix artige Systeme entwickelt und nicht für Systeme die nicht in der Lage sind neue Prozesse effizient zu starten.