Dateien packen mit tar

D

Der_Wolf

Jungspund
Hallo,

ich habe wieder ein Problem mit dem ich mich sehr schwer tue.

Also ich habe in einer Ordnerstruktur viele Dateien die ich packen möchte um platz zu sparen. Aus einem übergeordneten Ordner starte ich ein "find" um die Dateien mit vollständiegem Pfad zu finden. Dann möchte ich die gefundenen Dateien mit tar und gzip packen.

finden:
Code:
find -name *.asc -exec packen {} \;
packen:
Code:
directory=$1
directory=${directory%/*}
tar cz -C $directory $1 > $1.tar.gz

Nun die Dateien werden gefunden und gepackt allerdings enthält das Archiv danach die ganze Ordnerstruktur und nicht nur die gewünschte Datei.
Obwohl ich mit tar -C schon ins Verzeichniss gewechselt bin packt er jedesmal die ganze Ordnerstruktur von root an mit ein (so wie sie von find gefunden wird).

Hat jemand eine Idee wie ich das verhindern kann, sodass in jedem Unterordner in dem sich eine zu packende Datei befindet ein Archiv angelegt wird das NUR die Datei enthält und nicht die Ordnerstruktur.

mfg
Denny
 
Hallo,

ist die Frage jetzt zu schwer oder zu einfach oder einfach nur dumm??

mfg
Denny
 
Hi,

also da wuerden mir zwei Sachen zu einfallen. Erstens, find uebergibt ja auch den kompletten Pfadnamen an tar, hast du mal versucht den Pfad mit $(basename $myvar) zu strippen?
Ansonsten koenntest du mal mit der --transform Option von GNU tar rumspielen.

Hab leider keine Zeit meine Vorschlaege selber zu testen. ;)

mfg,
bytepool
 
Hallo

Ups habe den Beitrag ganz übersehen.

Wie bytepool schon sagte, liegt es am Full Path der Dateinamen.
Eine simple Lösung ergibt sich in etwa so.
Ist nur ein Vorschlag und ungetestet.
Code:
find /home/user/docs/ -type f|
while read f; 
  do
    tar -rvf /tmp/archiv.tar -C "$(dirname $f)" $(basename $f);
  done
gzip /tmp/archiv.tar

Gruß Wolfgang
 
Hallo,

erstmal vielen Dank an bytepool und Wolfgang :).

Ich hab es geschafft nun sieht es so aus:

Code:
tar -rvf $1.tar -C "$(dirname $1)" $(basename $1);
gzip $1.tar

Die Sache mit basename und dirname erleichtert die Sache natürlich, ich hatte es vorher mit regular Expressions versucht aber das war viel zu kompliziert.

mfg
Denny
 
Zuletzt bearbeitet:

Ähnliche Themen

Ausführbare C-Datei von Mac OS auf Embedded Linux ausführen

tar network backup problem

tars erstellen - prob mit shellscript

Paralleles packen von Dateien

Dateien nicht älter als 24h finden und archivieren

Zurück
Oben