View previous topic :: View next topic |
Author |
Message |
Martux Veteran
Joined: 04 Feb 2005 Posts: 1917
|
Posted: Tue May 23, 2006 6:31 am Post subject: [SOLVED] Frage zu tar |
|
|
Hallo! Kann mir jemand erklären warum tar anscheinend den --exclude Parameter ignoriert, wenn ich einen Befehl wie diesen absetze:
Code: |
cd /home/marc/ && tar --no-ignore-case -cvp --exclude=/home/marc/.kde3.5/share/apps/amarok/collection* -f /home/data/temp/marc23.05.06.tar .
|
(Punkt am Ende)
Es aber wunderbar geht, wenn ich es so absetze:
Code: |
cd /home/marc/ && tar --no-ignore-case -cvpf /home/data/temp/marc23.05.06.tar /home/marc --exclude=/home/marc/.kde3.5/share/apps/amarok/collection*
|
(Komplette Pfadangabe dabei)
Das Problem bei dem unteren Befehl ist eigentlich nur, dass der komplette Pfad (/home/marc) mitgesichert wird, ich aber möchte dass nur der Inhalt gesichert wird... Kann mir bitte jemand dieses Verhalten erklären? Ich finde tar doch recht sperrig im Umgang _________________ "Coincidence is God's way of remaining anonymous."
Albert Einstein
"The road to success is always under construction"
Last edited by Martux on Tue May 23, 2006 12:23 pm; edited 1 time in total |
|
Back to top |
|
|
STiGMaTa_ch Veteran
Joined: 28 Dec 2004 Posts: 1686 Location: Rüti ZH / Schweiz
|
Posted: Tue May 23, 2006 8:02 am Post subject: Re: Frage zu tar |
|
|
Hallo Martux
Martux wrote: | Code: |
cd /home/marc/ && tar --no-ignore-case -cvp --exclude=/home/marc/.kde3.5/share/apps/amarok/collection* -f /home/data/temp/marc23.05.06.tar .
|
|
Anstelle von cd /home/marc empfehle ich dir die Option -C von tar. Somit würde der Befehl dann folgendermassen aussehen.
Quote: | tar --no-ignore-case -cvp --exclude=/home/marc/.kde3.5/share/apps/amarok/collection* -C /home/marc -f /home/data/temp/marc23.05.06.tar . |
Der Grund warum das sichern mit diesem Befehl aber noch nicht geht ist deine Missinterpretation von --exclude. In der man Page steht dann auch:
Quote: | --exclude PATTERN
exclude files based upon PATTERN |
Du musst --exclude also nicht Verzeichnispfade angeben sondern Suchmuster. Wenn du nun mit meinem obigen Befehl sicherst, dann hast du das Problem, dass er ./irgendwas, ./wasanderes, ./.kde3.5 etc. sichert. Bei --exclude hast du jedoch angegeben er soll das pattern /home/marc/.kde3.5 excluden.
Da er aber ./.kde3.5 sichert und darin kein /home/marc/.kde3.5 vorkommt, wird das eben nicht excluded.
Und da du in deinem zweiten Beispiel:
Code: | cd /home/marc/ && tar --no-ignore-case -cvpf /home/data/temp/marc23.05.06.tar /home/marc --exclude=/home/marc/.kde3.5/share/apps/amarok/collection* |
Eben direkt /home/marc sicherst und er dadurch den exclude Pattern /home/marc/.kde3.5 findet, funktioniert es auch.
Soweit so klar?
Wenn du nun also bei meinem obigen Beispiel (mit dem -C drinn) den Pattern von /home/marc einfach in ./ änderst, dann wird es funktionieren:
Code: | tar --no-ignore-case -cvp --exclude=./.kde3.5/share/apps/amarok/collection* -C /home/marc -f /home/data/temp/marc23.05.06.tar . |
Lieber Gruss
STiGMaTa _________________ Ich bin Schuldknappe. Das bedeutet ich bin immer an allem Schuld. Und das nicht zu knapp! | Der alltägliche Familienwahnsinn auf meinem BLOG |
|
Back to top |
|
|
Martux Veteran
Joined: 04 Feb 2005 Posts: 1917
|
Posted: Tue May 23, 2006 8:29 am Post subject: |
|
|
Hallo Stigmata!
Danke für Deine ausführliche Antwort. Ehrlich gesagt versteh ich nur Bahnhof Ich habe den Befehl der Lesbarkeit halber stark vereinfacht gepostet. Ich möchte einige Unterverzeichnisse komplett excluden (sie sollen zwar angelegt werden, aber eben leer). Wenn ich jetzt Dein unterstes Code-Beispiel ausführe, wird leider wieder der komplette Pfad mitgesichert, sprich ich habe ein tar mit den Unterordnern home und marc, was mir beim entpacken einiges Kopfzerbrechen bereitet, da das ganze ja im Falle eines GAUs auf der Kommandozeile funktionieren soll. Ich mache das ganze ja auch mit dem /-Verzeichnis...
Ich poste mal den ganzen Befehl, vielleicht kannst Du mir sagen, wie ich das hinbiegen kann:
Code: |
tar --no-ignore-case -cvpf /mnt/backup/marc.tar /home/marc --exclude=/home/marc/.thumbnails/* --exclude=/home/marc/vmware/* --exclude=/home/marc/.wine/drive_c/windows/temp/* --exclude=/home/marc/.kde3.5/share/apps/amarok/collection* --exclude=/home/marc/.opera/cache4/* --exclude=/home/marc/.ssh/*
|
Ja, der ist lang
Lieben Gruß, Marcus _________________ "Coincidence is God's way of remaining anonymous."
Albert Einstein
"The road to success is always under construction" |
|
Back to top |
|
|
STiGMaTa_ch Veteran
Joined: 28 Dec 2004 Posts: 1686 Location: Rüti ZH / Schweiz
|
Posted: Tue May 23, 2006 9:43 am Post subject: |
|
|
Fangen wir also von vorne an.
1.) Der unterschied zwischen PATTERN und PATH.
Bei PATTERN handelt es sich um ein Suchmuster und NICHT um eine Pfadangabe (Wobei natürlich das Suchmuster auch der Pfadangabe entsprechen könnte). Das bedeutet, du könntest z.B. alle Dateien excluden, welche das Wort ante darin enthalten. Das Verzeichnis "fuer_tante_frieda" wie auch die Datei "Dante.pdf" würden dann NICHT gesichert werden. Das Suchmuster müsste dann folgendermassen aussehen:
Warum die Sterne vor und nach ante?? Nun, wenn du die weglässt, dann excluded er nur die Pfade welche GENAU ante heissen. Mit den sternen gibst du an; exclude alles was dem Muster [irgendwas]ante[irgendwas] entspricht.
Soweit klar?
2.) Das PATTERN muss vorhanden sein.
Gehen wir nochmals vom ante Beispiel aus. Stell dir vor deine Verzeichnisstruktur sieht so aus:
Quote: | ~/fuer_tante_frieda
~/fuer_tante_frieda/dankesbrief.txt
~/Dante.pdf
~/Linksammlung.txt |
Gehen wir nun davon aus du befindest dich im Home Verzeichnis und willst alles ausser die *ante* Dateien sichern. Dann musst du folgenden Befehl eingeben.
Code: | tar cvf /tmp/marc.tar . --exclude="*ante*" |
Output:
Code: | marc@marcsrechner ~ $ tar cvf /tmp/marc.tar . --exclude="*ante*"
./
./Linksammlung.txt |
Wenn du die Sterne jedoch weg lässt, dann sichert er dir alles bis auf Dateien oder Verzeichnisse Namens ante:
Code: | tar cvf /tmp/marc.tar . --exclude="ante"
./
./Dante.pdf
./Linksammlung.txt
./fuer_tante_frieda/
./fuer_tante_frieda/dankesbrief.txt
|
Zum Beweis kannst du ja im Verzeichnis fuer_tante_frieda ein Unterverzeichnis namens ante erzeugen sowie in ~/ eine Datei Namens ante. Du wirst sehen, dass die Datei sowie das Unterverzeichnis NICHT gesichert werden.
Um nun also zurück zu deinem Beispiel zu kommen:
Wenn du ein tar -C /home/marc cvf /tmp/marc.tar . machst, dann wird der Output folgendermassen aussehen:
Code: | ./IrgendeineDatei
./Nocheine
etc. |
Wenn du anstelle des Punktes den Pfad angibst, dann wird der Output folgendermassen aussehen:
Code: | tar cvf /tmp/marc.tar /home/marc
/home/marc/IrgendeineDatei
/home/marc/Nocheine
etc.
|
Und da siehst du dann auch warum dein erster Exclude nicht funktioniert hatte. Wenn du --exclude=/home/marc/IrgendeineDatei benutzt, dann wird das Pattern nur matchen, wenn er auch /home/marc/IrgendeineDatei sichert. Wenn du jedoch mit -C /home/marc bereits in das Verzeichnis wechselst und dort nur "." sicherst, dann matcht /home/marc/IrgendeineDatei nunmal nicht mit ./IrgendeineDatei. Deshalb muesste das Exclude dann --exclude=./IrgendeineDatei lauten.
Jetzt verstanden?
Um nun die gewünschten Verzeichnise bei dir zu excluden und um sicherzustellen, dass er nur ./xxx sichert und nicht /home/marc/xxx musst du demnach dein Beispiel folgendermassen abändern (beachte den Punkt nach -C /home/marc !!!):
Quote: |
tar --no-ignore-case -cvpf /mnt/backup/marc.tar -C /home/marc . --exclude=./.thumbnails/* --exclude=./vmware/* --exclude=./.wine/drive_c/windows/temp/* --exclude=./.kde3.5/share/apps/amarok/collection* --exclude=./.opera/cache4/* --exclude=./.ssh/*
|
EDIT
Und als Beweis, dass es funktioniert, hier ein Test bei mir (rot entspricht dabei Dateien, welche NICHT gesichert werden dürfen, Gruen entspricht den Dateien und Verzeichnissen, welche gesichert werden dürfen):
Quote: | labrador marc # pwd
/home/marc
labrador marc # find .
.
./.ssh
./.ssh/nichtsichern.txt
./.wine
./.wine/drive_c
./.wine/drive_c/windows
./.wine/drive_c/windows/temp
./.wine/drive_c/windows/sichern.txt
./.wine/drive_c/windows/temp/nichtsichern.txt
./.kde3.5
./.kde3.5/share
./.kde3.5/share/apps
./.kde3.5/share/apps/sichern.txt
./.kde3.5/share/apps/amarok
./.kde3.5/share/apps/amarok/collection1-nichtsichern.txt
./sichern.txt
./.thumbnails
./.thumbnails/nichtsichern.txt
./vmware
./vmware/nichtsichern.txt
./.opera
./.opera/sichern.txt
./.opera/cache4
./.opera/cache4/nichtsichern.txt
|
Mit nachfolgendem Befehl wird dann auch genau das gesichert:
Code: | tar --no-ignore-case -cvpf /tmp/marc.tar -C /home/marc . --exclude=./.thumbnails/* --exclude=./vmware/* --exclude=./.wine/drive_c/windows/temp/* --exclude=./.kde3.5/share/apps/amarok/collection* --exclude=./.opera/cache4/* --exclude=./.ssh/* |
Quote: | ./
./.ssh/
./.wine/
./.wine/drive_c/
./.wine/drive_c/windows/
./.wine/drive_c/windows/temp/
./.wine/drive_c/windows/sichern.txt
./.kde3.5/
./.kde3.5/share/
./.kde3.5/share/apps/
./.kde3.5/share/apps/sichern.txt
./.kde3.5/share/apps/amarok/
./sichern.txt
./.thumbnails/
./vmware/
./.opera/
./.opera/sichern.txt
./.opera/cache4/
|
Lieber Gruss
STiGMaTa _________________ Ich bin Schuldknappe. Das bedeutet ich bin immer an allem Schuld. Und das nicht zu knapp! | Der alltägliche Familienwahnsinn auf meinem BLOG
Last edited by STiGMaTa_ch on Tue May 23, 2006 9:59 am; edited 1 time in total |
|
Back to top |
|
|
Martux Veteran
Joined: 04 Feb 2005 Posts: 1917
|
Posted: Tue May 23, 2006 9:54 am Post subject: |
|
|
WOW, Mann! Ich danke Dir! Das ist mal mit Abstand die anschaulichste und am Besten verständliche Erläuterung zum Thema tar. Damit werde auch ich *Vollprofi* es endlich mal gebacken kriegen, eine vernünftige Sicherungskopie meines Systems anzufertigen. Danke für die Arbeit, MArcus _________________ "Coincidence is God's way of remaining anonymous."
Albert Einstein
"The road to success is always under construction" |
|
Back to top |
|
|
STiGMaTa_ch Veteran
Joined: 28 Dec 2004 Posts: 1686 Location: Rüti ZH / Schweiz
|
Posted: Tue May 23, 2006 11:15 am Post subject: |
|
|
Martux wrote: | WOW, Mann! Ich danke Dir! |
Gern geschehen...
P.s. machst du noch ein [Solved] vor den Threadtitel? Danke!
Lieber Gruss
STiGMaTa _________________ Ich bin Schuldknappe. Das bedeutet ich bin immer an allem Schuld. Und das nicht zu knapp! | Der alltägliche Familienwahnsinn auf meinem BLOG |
|
Back to top |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|