Symbolische Links und 7zip

18

Ich versuche, einen Ordner in ein .7z-Archiv zu komprimieren. Dieser Ordner enthält symbolische Links zu anderen Dingen außerhalb des Ordners (sowohl Verzeichnisse als auch Dateien).

Anscheinend archiviert 7zip nur den Link selbst, was nicht meine Absicht ist. Gibt es eine Möglichkeit, 7zip mitzuteilen, dass es die Inhalte archivieren soll, auf die es verweist, und nicht den Link selbst? (Das heißt, wenn es einen Symlink-Namen gibt, fooder darauf verweist C:\stuff\foo, möchte ich, dass das C:\stuff\fooVerzeichnis anstelle von foo in das Archiv aufgenommen wird und kein 0-Byte-Symlink.)

Gibt es eine vernünftige Problemumgehung außer dem Hinzufügen der fraglichen Dateien und Ordner? Es gibt ungefähr 10.000 Dateien, auf die über Symlinks verwiesen wird. Das Hinzufügen einzelner Dateien würde also Stunden dauern. Vielleicht gibt es ein Programm, das einen Staging-Ordner mit den tatsächlichen Dateien erstellt und diesen dann an 7zip weiterleitet. Oder nur ein Archivierer, der Symlinks besser handhabt.

Ich verwende Windows Vista. Alle Links sind symbolische Links (zB erstellt mit mklink link targetund mklink /D link target).

BEARBEITEN:

dir Befehlsausgabe für ein kleineres Testverzeichnis:

C:\...>dir
 Volume in drive C is OS
 Volume Serial Number is 0A3D-CD6E

 Directory of C:\...

09/04/2010  18:12    <DIR>          .
09/04/2010  18:12    <DIR>          ..
09/04/2010  18:10               975 real file.txt
09/04/2010  18:11    <SYMLINK>      test file.txt [..\test file.txt]
               2 File(s)            975 bytes
               4 Dir(s)   5,214,355,456 bytes free

Das Erstellen eines 7z-Archivs mit 7zip führt real file.txtdazu, dass es eingeschlossen wird, es test file.txtwird jedoch als 0-Byte-Datei hinzugefügt, obwohl die verknüpfte Datei existiert und 50 KB groß ist.

Feuer Lancer
quelle
Welches Betriebssystem verwenden Sie?
Charles Gargent
2
Schlägt nicht das "Windows" -Tag vor, dass ich benutze, gut Windows ...
Fire Lancer
1
Ok, welche Windows-Version verwenden Sie?
Charles Gargent
@Fire Lancer: Im Allgemeinen ist es eine gute Idee, alle Informationen aus den Tags im Text zu wiederholen. Einfacher zu lesen und nicht jeder schaut sich die Tags an (da sie unten sind). Außerdem können die Tags zu Missverständnissen führen. ZB bin ich vielleicht unter Linux, möchte aber mit Windows zusammenarbeiten, also tippe ich meine Frage auf "Windows".
Sleske
1
Nun wäre es , dass die 7z - Archive erscheinen <SYMLINKD> und <JUNCTION> Verzeichnisse aber nicht <SYMLINK> Dateien, so dass ich denke , wenn Sie alle Ihre Dateien in einem Verzeichnis und Symlink schleichen kann , dass es funktionieren würde
Hova

Antworten:

13

Anscheinend archiviert 7zip nur den Link, den es selbst ist, was ich nicht beabsichtigt habe. Gibt es eine Möglichkeit, 7zip mitzuteilen, dass ich möchte, dass es die Inhalte archiviert, die es auch verknüpft, und nicht den Link selbst

Nein, anscheinend nicht (leider). Es gibt tatsächlich einen Fehlerbericht zu 7zip, der dies anfordert: http://sourceforge.net/tracker/?func=detail&aid=2846755&group_id=14481&atid=114481, der jedoch im August 2009 geöffnet und seitdem nicht mehr aufgerufen wurde: - /.

Andernfalls gibt es irgendeinen vernünftigen Grund, abgesehen vom Hinzufügen der fraglichen Dateien und Ordner? Einschließlich der Inhalte über den Symlink gibt es etwa 10 000 Dateien, von denen der Großteil über Symlinks erfolgt, sodass das Hinzufügen aller Dateien für sich genommen Stunden dauern würde ...

Wenn Sie genügend Speicherplatz (und Zeit) haben, können Sie eine Kopie des Ordners erstellen und die Symlinks durch ihre Ziele ersetzen. Sie können zB Robocopy und seinen Schalter verwenden /sl:

/ sl Kopiert den symbolischen Link anstelle des Ziels


Hinweis: Nur um Verwirrung zu vermeiden, beachten Sie, dass die Linux - Version von p7zip (ein Port von 7 - Zip) auch eine binäre hat , 7zdie hat Unterstützung für die Dateiarchivierung ein symbolischer Link verweist auf (Schalter -l). 7zip unter Windows verfügt jedoch nicht über diesen Schalter.

sleske
quelle
Da dies die genehmigte Antwort ist, möchten wir darauf hinweisen, dass 7zip dies per -lSwitcher tut . zip und gzip tun dies auch mit ihren spezifischen Befehlen.
m3nda
@ erm3nda wo siehst du diesen Schalter? Bitte geben Sie die Referenz an.
Markieren Sie den
linux.die.net/man/1/7z Es gibt eine Option l und einen Schalter mit demselben Buchstaben. Ich habe bemerkt, dass diese Option in der Windows-Version der Software nicht vorhanden ist.
m3nda
@ erm3nda: Ja, aber das ist p7zip, ein Port von 7zip. Vielen Dank für den Hinweis. Ich habe meine Antwort aktualisiert.
sleske
Danke dir auch. Kann nicht glauben, dass Windows diese Funktion fehlt. Auch wenn die Symlinks unter Windows sehr unterschiedlich sind, sollten Sie nicht herausfinden, warum es schwierig ist, sie zum Laufen zu bringen.
m3nda
-1

Wenn Sie Vista oder höher verwenden, entfernen Sie die Symlinks und ersetzen Sie sie durch mklinks

mklink /D Directory FullPathToRealDirectory

Beachten Sie, dass mklink ziemlich leistungsfähig ist und Links zu Netzwerkfreigaben und Ähnlichem enthalten kann.

Da diesbezüglich einige Verwirrung zu herrschen scheint, gestatten Sie mir, dies zu klären. Ich gehe davon aus, dass es sich im OP tatsächlich um Junctions handelt, wie hier dargestellt: http://en.wikipedia.org/wiki/NTFS_junction_point . Mklink macht keine Abzweigungen . Es macht TRUE symbolische Links und ich habe es selbst ausprobiert und 7zip respektiert sie perfekt. Außerdem müssen Sie Administrator sein, um symbolische Links für mklink zu erstellen.

 Directory of C:\temp\t

04/08/2010  04:50 PM    <DIR>          .
04/08/2010  04:50 PM    <DIR>          ..
04/08/2010  04:31 PM    <SYMLINKD>     GB [c:\users\testuser]    <-- created by mklink
04/08/2010  04:50 PM    <JUNCTION>     GB2 [\??\c:\users\testuser] <-- created by junction
04/08/2010  04:29 PM                 8 test.txt

7zip archiviert GB, aber NICHT GB2. BEARBEITEN: Weitere Tests zeigen, dass 7zip beide Verzeichnisse mit Version 4.65 archiviert. Ich habe also keine Ahnung, wo das Problem liegt.

hova
quelle
1
Angesichts der Tatsache, dass alle ursprünglichen Symlinks in erster Linie mit den Microsoft-APIs und mklik erstellt wurden, was löst dies, abgesehen davon, dass dasselbe neu zu erstellen?
Feuer Lancer
2
-1 Wie löst das das Problem? Sie beschreiben nur, wie Sie symbolische Verknüpfungen erstellen.
Sleske
@hova: Ja, das ist alles wahr (obwohl MS normalerweise nur die symbolischen Links "symbolische Links" nennt; Kreuzungen werden niemals als "symbolische Links" bezeichnet). Aber wie hängt das mit der Frage zusammen?
Sleske
7zip archiviert SYMLINKD (mklink) Verzeichnisse!
Hova
1
Ich habe gerade ein paar Tests mit 7zip v15.14 (64 Bit) unter Windows 7 durchgeführt, und es scheint, dass 7zip jetzt Verzeichnissymlinks folgt, aber nur eine leere Datei für Dateisymlinks speichert - was nicht sehr nützlich ist.
Bigue Nique