Ich mache derzeit in einem Shellscript sehr ineffizient:
cp -a $MYPATH /tmp/$VERSION
cd /tmp
tar cjf archive.tar.bz2 $VERSION
Ich möchte, dass alles in dem Verzeichnis mit dem Namen $ VERSION enthalten ist. Gibt es eine Möglichkeit, dies zu tun, ohne alles wie im obigen Skript kopieren zu müssen?
tar cjf archive.tar.bz2 $MYPATH
?Antworten:
Die GNU-Version von
tar
unterstützt die--transform
Option (und ihren Alias--xform
), Sie könnten sie so verwendenZum Beispiel angesichts dieses Verzeichnisbaums
der Befehl
erzeugt ein Archiv wie
quelle
flags=r;
löst das Problem wie in stackoverflow.com/a/29661783/388803 erwähnt .s/^a\//b\//
zeigt dastar -t
noch,a/
während alle anderen Dateien unter sindb/
; Ich gehe davon aus, dass dies gefährlich ist, und ich muss mich nicht wirklich vor einer anderen Datei mit demselben Präfix schützen, die kein Verzeichnis in der TAR-Datei ist. Damit kein abschließender Schrägstrich in Ordnung ist, würde es mir nichts ausmachen, zu wissen, wie man den Fall dera/
Transformation am besten handhabt , aber nicht,aa/
wenn es ein Geschwister des Wurzelknotens wäre.Um das aktuelle Verzeichnis zu tarieren und ein Präfix hinzuzufügen, funktionierte dies für mich:
quelle
Wenn Sie davonkommen können, ohne die symbolischen Verknüpfungen innerhalb des Dateibaums, den Sie tarieren, beizubehalten, können Sie dies tun
Die
h
Option bedeutet, dass Symlinks dereferenziert werden, dh die Datei oder das Verzeichnis enthalten, auf die bzw. das der Link verweist, anstatt nur die Tatsache aufzuzeichnen, dass ein Symlink vorhanden war und auf was dieser verweist.quelle