Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
[SOLVED] Frage zu tar
View unanswered posts
View posts from last 24 hours
View posts from last 7 days

 
Reply to topic    Gentoo Forums Forum Index Deutsches Forum (German)
View previous topic :: View next topic  
Author Message
Martux
Veteran
Veteran


Joined: 04 Feb 2005
Posts: 1917

PostPosted: Tue May 23, 2006 6:31 am    Post subject: [SOLVED] Frage zu tar Reply with quote

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
View user's profile Send private message
STiGMaTa_ch
Veteran
Veteran


Joined: 28 Dec 2004
Posts: 1686
Location: Rüti ZH / Schweiz

PostPosted: Tue May 23, 2006 8:02 am    Post subject: Re: Frage zu tar Reply with quote

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
View user's profile Send private message
Martux
Veteran
Veteran


Joined: 04 Feb 2005
Posts: 1917

PostPosted: Tue May 23, 2006 8:29 am    Post subject: Reply with quote

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
View user's profile Send private message
STiGMaTa_ch
Veteran
Veteran


Joined: 28 Dec 2004
Posts: 1686
Location: Rüti ZH / Schweiz

PostPosted: Tue May 23, 2006 9:43 am    Post subject: Reply with quote

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:
Code:
--exclude="*ante*"


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
View user's profile Send private message
Martux
Veteran
Veteran


Joined: 04 Feb 2005
Posts: 1917

PostPosted: Tue May 23, 2006 9:54 am    Post subject: Reply with quote

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
View user's profile Send private message
STiGMaTa_ch
Veteran
Veteran


Joined: 28 Dec 2004
Posts: 1686
Location: Rüti ZH / Schweiz

PostPosted: Tue May 23, 2006 11:15 am    Post subject: Reply with quote

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
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index Deutsches Forum (German) All times are GMT
Page 1 of 1

 
Jump to:  
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