Ich verwende das folgende Pseudoskript, um eine TAR-Datei meiner installierten Software zu erstellen
mkdir tmp
ln -s /path/to/app1/bin tmp/app1
ln -s /and/path/going/to/the-app-2 tmp/app2
tar -c --dereference -f apps.tar tmp
Ich brauche --dereference
hier die Möglichkeit, den Links zu folgen, die ich gerade erstellt habe tmp
. Der Grund, warum ich die Links überhaupt erstelle, besteht darin, die Verzeichnisse im Archiv unter einem anderen Namen zu speichern als im Dateisystem.
Bis jetzt hat es gut funktioniert. Allerdings habe ich jetzt die Situation, dass /path/to/app1
auch Links enthalten sind, denen ich nicht folgen möchte.
Ist dies mit einigen Änderungen am tar
Befehl möglich? Oder muss ich die Art und Weise, wie ich das Archiv erstelle, komplett umstellen?
Antwort1
Ich glaube nicht, dass es eine Möglichkeit gibt, nur eine teilweise Dereferenzierung durchzuführen. Sie könnten etwas tun wie
tar -cf apps.tar /path/to/app1/bin /and/path/going/to/the-app-2
und sie dann mit -C in eine andere Wurzel zu extrahieren
-C, --directory=DIR
change to directory DIR
z.B
mkdir tmp
tar -C tmp -xf apps.tar
Dies hätte eine ähnliche Wirkung wie die Art und Weise, wie Sie derzeit Ihr Archiv erstellen.
Sie können -C auch verwenden, um auf ein beliebiges vorhandenes Verzeichnis zu verweisen.
Antwort2
Muss die Verzeichnisstruktur im Tarball wirklich anders sein als auf der Festplatte?
Wenn nicht, können Sie sie einfach so tarnen, wie sie sind:
tar -cf file.tar /path/1 /path/2
Antwort3
Anstatt zu verknüpfen, könnte ich kopieren. Leider würde das zusätzlichen Aufwand bedeuten (die Dateien sind ziemlich groß). Natürlich würde es höchstens doppelt so groß werden, da das Tarieren selbst auch eine Form des Kopierens ist.
Antwort4
Wenn das der root
Fall ist, ist es am besten, den Bind-Befehl von mount zu verwenden, um die Verzeichnisse, die Sie tarnen möchten, grundsätzlich fest zu verknüpfen, anstatt symbolische Links zu ihnen zu erstellen. Dann müssen Sie die Dereferenzierungsoption nicht verwenden.
mkdir tmp
mount --bind /path/to/app-1 tmp/app-1
mount --bind /path/to/app-2 tmp/app-2
tar cf apps.tar tmp
Stellen Sie sicher, dass Sie diese Verzeichnisse aushängen, bevor ihnen versehentlich etwas passiert. Siehediese Warnungen.