smbclient -c "tar cX"

Einrichten des lokalen Netzes, Verbindung zu anderen Computern und Diensten.
Antworten
Benutzeravatar
seep
Beiträge: 544
Registriert: 31.10.2004 14:21:08
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: HSK

smbclient -c "tar cX"

Beitrag von seep » 12.03.2008 10:51:02

Ich möchte mittels smbclient die "Eigenen Dateien" eines Windows-Rechners regelmäßig sichern, hierbei aber bestimmte Verzeichnisse ausschließen. smbclient bietet bei seinem eingebauten tar ja mittels Option X, Dateien und Verzeichnisse auszuschließen.

Was beim Aufruf von "smbclient ... -TXc foo.tar BAR" (Archiv foo.tar ohne Verzeichnis BAR) wunderbar klappt, will mir bei smbclient ... -c "tar cX foo.tar BAR" einfach nicht gelingen.

Zum Testen habe ich unterhalb von "Eigene Dateien" ein Verzeichnis "Test" mit folgendem Inhalt angelegt:

Code: Alles auswählen

Test/FOO/foo.txt
Test/BAR/bar.txt
Test/foo.txt
Test/bar.txt
Die Manpage von smbclient (3.0.14a-Debian) schreibt, tar sei so aufzurufen:

Code: Alles auswählen

 
      tar <c|x>[IXbgNa]
              Performs  a tar operation - see the -T  command line option above...
Dies bedeutet für mich eigentlich, daß "-T" und "-c tar" äquivalent zu benutzen sind. Sind sie aber scheinbar nicht. :(

Hier meine Versuche, die Datei Test/foo.txt von der Sicherung auszuschließen. Wie gesagt, ich muß mit "-c tar" arbeiten; daß "-TXc" funktioniert, bringt mich erst einmal nicht weiter:

Code: Alles auswählen

#!/bin/bash

PASSWORD="..."
SHARE="//rechner/C\$"
STARTDIR="/Dokumente und Einstellungen/user/Eigene Dateien/Test"

# -T: ohne Datei foo.txt sichern (ok)
# smbclient -A "$PASSWORD" "$SHARE" -D "$STARTDIR" -TXc ed.tar "$STARTDIR/Test/foo.txt"

# -T: ohne Verzeichnis FOO sichern (ok)
# smbclient -A "$PASSWORD" "$SHARE" -D "$STARTDIR" -TXc ed.tar "$STARTDIR/Test/FOO"

# -c "tar": ohne Datei foo.txt sichern (alle NOK)
# Für's debianforum mal die Optionen -A, den Share und -D weggelassen
# im Script stehen sie selbstverständlich mit drin
# smbclient ...  -c "tar Xc ed.tar $STARTDIR/Test/foo.txt"
# smbclient ...  -c "tar Xc ed.tar \"$STARTDIR/Test/foo.txt\" "
# smbclient ...  -c "tar cX ed.tar $STARTDIR/Test/foo.txt"
smbclient ...  -c "tar cX ed.tar \"$STARTDIR/Test/foo.txt\" "
Was man auch tut, tar sichert immer alles. Hat jemand zufällig einen Tipp, wie die Optionen hier zu verwenden sind?

Benutzeravatar
Six
Beiträge: 8071
Registriert: 21.12.2001 13:39:28
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Siegburg

Re: smbclient -c "tar cX"

Beitrag von Six » 12.03.2008 11:20:32

seep hat geschrieben: tar <c|x>[IXbgNa]
Performs a tar operation - see the -T command line option above...[/code]

Dies bedeutet für mich eigentlich, daß "-T" und "-c tar" äquivalent zu benutzen sind. Sind sie aber scheinbar nicht. :(
Nein, sind sie auch nicht. Bei -c <command> folgt <command> der Syntax des benutzten Befehls.
Hier meine Versuche, die Datei Test/foo.txt von der Sicherung auszuschließen. Wie gesagt, ich muß mit "-c tar" arbeiten; daß "-TXc" funktioniert, bringt mich erst einmal nicht weiter:
Du solltest zunächst einen command string ohne smbclient bauen, der funktioniert. tar hat eine andere Syntax als smbclient.
Was man auch tut, tar sichert immer alles. Hat jemand zufällig einen Tipp, wie die Optionen hier zu verwenden sind?
Da es sich hier um die GNU-Tools handelt, solltest du Parameter mit einem "-" eingeben. Des Weiteren hat dein tar Befehl einen Syntaxfehler, X ist parametrisiert, d. h. X <parameter>. Siehe auch man tar.

Um eine einzelne Datei nicht mitzusichern:

Code: Alles auswählen

tar -c --exclude="Test/foo.txt" archiv.tar Test
Um eine Reihe von Dateien nicht mitzusichern, baue einen regulären Ausdruck, z. B. *.txt aber auch ruhig komlizierter, oder erstelle eine Liste, die du in eine Datei speicherst und mit

Code: Alles auswählen

tar -cX auschlussdatei archiv.tar Test
aufrufst.

Viel Erfolg
Be seeing you!

Benutzeravatar
seep
Beiträge: 544
Registriert: 31.10.2004 14:21:08
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: HSK

Re: smbclient -c "tar cX"

Beitrag von seep » 12.03.2008 12:01:28

Six hat geschrieben:Du solltest zunächst einen command string ohne smbclient bauen, der funktioniert. tar hat eine andere Syntax als smbclient.

...

Da es sich hier um die GNU-Tools handelt, solltest du Parameter mit einem "-" eingeben. Des Weiteren hat dein tar Befehl einen Syntaxfehler, X ist parametrisiert, d. h. X <parameter>. Siehe auch man tar.
Sitzt Du nicht gerade einem kleinem Irrtum auf? Was ich mit "smbclient -c" aufrufe, das sind die in smbclient eingebauten Kommandos. Mitnichten ruft smbclient externe GNU-Tool für den tar auf! Siehe man smbclient:

Code: Alles auswählen

-c command string
    command string is a semicolon-separated list of commands to be executed
    instead of prompting from stdin.  -N is implied by -c.

    This is particularly useful in scripts and for printing stdin to the server, e.g. -c 'print -'.
Sprich, ich kann mit -c das angeben, was ich sonst am smbclient-Prompt eingebe. Leider nützt es mir da nicht, wenn ich mir einen GNU-tar-Befehl zusammenbastel. Ergebnis: "Unknown tar option".

Benutzeravatar
seep
Beiträge: 544
Registriert: 31.10.2004 14:21:08
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: HSK

Beitrag von seep » 12.03.2008 14:08:18

Selbstantwort: Es handelt sich vermutlich um einen Bug im smbclient bezüglich dieses speziellen Falles, wenn beim smbclient-Prompt der tar mit Exclude-Liste verwendet wird genau dann, wenn in den Pfaden Leerzeichen vorkommen.

Habe mir mal den Source-Code besorgt und ein wenig quergelesen. smbclient baut intern eine List mit den Pfaden und Dateien auf, die gefiltert werden müssen. In diesem Falle hat die Liste aber nicht nur ein Element mit "/Dokumente und Einstellungen/user/Eigene Dateien/Test/foo.txt", sondern mehrere beginnend mit "/Dokumente", das nächste "und", das nächste "Einstellungen/user" usw. Und deswegen matcht hinterher nichts und der tar packt alles ein.

Grmpf, quoten und escapen selbst am smbclient-Prompt bringt nichts...

In der offiziellen Samba-Dokumentatation ist auch nichts zu finden, was man tun könnte. Pech gehabt :(

Benutzeravatar
Ano
Beiträge: 492
Registriert: 07.10.2002 17:39:08

Beitrag von Ano » 12.03.2008 14:13:07

Und wenn du es mit der alternativen 8.3-Notation probierst?

Ano
"Lass die Leute reden und lächle einfach mild,
Die meisten Leute haben ihre Bildung aus der Bild.
Und die besteht nun mal, wer wüsste das nicht,
aus: Angst, Hass, Titten und dem Wetterbericht!" - die ärzte

Benutzeravatar
seep
Beiträge: 544
Registriert: 31.10.2004 14:21:08
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: HSK

Beitrag von seep » 12.03.2008 14:39:27

Ano hat geschrieben:Und wenn du es mit der alternativen 8.3-Notation probierst?
Gute Idee! Klappt! :)

Code: Alles auswählen

#!/bin/bash

PASSWORD="..."
SHARE="//rechner/C\$"
STARTDIR="/Dokume~1/user/Eigene~1/Test"

# -c "tar": ohne Datei foo.txt sichern (ok)
# Für's debianforum mal die Optionen -A, den Share und -D weggelassen
# im Script stehen sie selbstverständlich mit drin
smbclient ...  -c "tar cX ed.tar $STARTDIR/foo.txt"
Im Tarfile stehen natürlich nun auch die Pfade als "Dokume~1" etc. drin, aber das ist momentan das kleinere Übel.

Benutzeravatar
Six
Beiträge: 8071
Registriert: 21.12.2001 13:39:28
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Siegburg

Beitrag von Six » 13.03.2008 13:02:33

Na, das habe ich wohl versemmelt. Mit Erfolg läßt sich nicht streiten ;)
Be seeing you!

Benutzeravatar
seep
Beiträge: 544
Registriert: 31.10.2004 14:21:08
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: HSK

Beitrag von seep » 13.03.2008 14:47:21


Antworten