Tar-Dereferenzierung nur 1 Ebene

Tar-Dereferenzierung nur 1 Ebene

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 --dereferencehier 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/app1auch Links enthalten sind, denen ich nicht folgen möchte.

Ist dies mit einigen Änderungen am tarBefehl 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 rootFall 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.

verwandte Informationen