Liens symboliques et 7zip

18

J'essaie de compresser un dossier dans une archive .7z. Ce dossier contient des liens symboliques vers d'autres éléments en dehors du dossier (répertoires et fichiers).

Apparemment, 7zip archive simplement le lien lui-même, ce qui n'est pas ce que je voulais. Existe-t-il un moyen de dire à 7zip que je veux qu'il archive les éléments auxquels il est lié, pas le lien lui-même? (C'est-à-dire s'il y a un nom de lien symbolique fooqui pointe vers C:\stuff\foo, je veux qu'il inclue le C:\stuff\foorépertoire dans l'archive à la place de foo, pas un lien symbolique de 0 octet.))

Existe-t-il une solution de contournement raisonnable à part l'ajout des fichiers et des dossiers en question? Il y a environ 10 000 fichiers référencés via des liens symboliques, donc les ajouter tous individuellement prendrait des heures… Peut-être qu'il y a un programme qui crée un dossier intermédiaire avec les vrais fichiers dedans puis le transmet à 7zip. Ou tout simplement un archiveur qui gère mieux les liens symboliques.

J'utilise Windows Vista. Tous les liens sont des liens symboliques (par exemple créés avec mklink link targetet mklink /D link target).

ÉDITER:

dir sortie de commande pour un répertoire de test plus petit:

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

La création d'une archive 7z de celle-ci avec 7zip entraîne real file.txtson inclusion, mais test file.txtest ajoutée en tant que fichier de 0 octet, bien que le fichier lié à existe et fasse 50 Ko.

Lancer de feu
la source
Quel système d'exploitation utilisez-vous?
Charles Gargent
2
La balise "windows" ne suggère-t-elle pas que j'utilise bien des fenêtres ...
Fire Lancer
1
Ok, quelle version de Windows utilisez-vous?
Charles Gargent
@Fire Lancer: Généralement, c'est une bonne idée de répéter toutes les informations des balises dans le texte. Plus facile à lire et tout le monde ne regarde pas les tags (car ils sont en bas). De plus, les balises peuvent être sujettes à des malentendus. Par exemple, je suis peut-être sous Linux, mais je veux interagir avec Windows, alors je marque ma question "windows".
sleske
1
Eh bien, il semblerait que 7z archive les répertoires <SYMLINKD> et <JUNCTION> mais pas les fichiers <SYMLINK>, donc je suppose que si vous pouvez glisser tous vos fichiers dans un répertoire et un lien symbolique que cela fonctionnerait
hova

Réponses:

13

Apparemment, 7zip archive juste le lien c'est soi qui n'est pas ce que je voulais. Existe-t-il un moyen de dire à 7zip que je veux qu'il archive aussi les éléments qu'il relie, pas le lien lui-même

Non, apparemment pas (malheureusement). Il y a en fait un rapport de bug sur 7zip demandant ceci: http://sourceforge.net/tracker/?func=detail&aid=2846755&group_id=14481&atid=114481 mais il a été ouvert en août 2009 et n'a pas été touché depuis: - /.

À défaut, y a-t-il une raison raisonnable à cela, à part l'ajout des fichiers et des dossiers en question? En incluant les éléments via le lien symbolique, il y a environ 10 000 fichiers, dont la grande partie se fait via des liens symboliques, donc les ajouter tous individuellement prendrait des heures ...

Eh bien, si vous avez suffisamment d'espace (et de temps), vous pouvez faire une copie du dossier, en remplaçant les liens symboliques par leurs cibles. Vous pouvez par exemple utiliser Robocopy et son commutateur /sl:

/ sl Copie le lien symbolique au lieu de la cible


Remarque: Juste pour éviter toute confusion, notez que la version Linux de p7zip (un port de 7zip) a également un binaire 7zqui prend en charge l'archivage du fichier vers lequel un lien symbolique pointe (switch -l). Cependant, 7zip sous Windows n'a pas ce commutateur.

sleske
la source
Parce que c'est la réponse approuvée, je veux souligner que le 7zip réel le fait par -lcommutateur. zip et gzip le font aussi avec leurs commandes spécifiques.
m3nda
@ erm3nda où voyez-vous ce commutateur? Veuillez fournir la référence.
marquez le
linux.die.net/man/1/7z Il y a une option l, et il y a aussi un commutateur avec la même lettre. J'ai noté que cette option n'est pas présente dans la version Windows du logiciel.
m3nda
@ erm3nda: Oui, mais c'est p7zip, un port de 7zip. Merci de l'avoir signalé; J'ai mis à jour ma réponse.
sleske
Merci aussi. Je ne peux pas croire que Windows manque cette fonctionnalité. Même si les liens symboliques sous Windows sont assez différents, ne comprenez pas pourquoi il est difficile de le faire fonctionner.
m3nda
-1

Si vous utilisez Vista et supérieur, supprimez les liens symboliques et remplacez-les par mklinks

mklink /D Directory FullPathToRealDirectory

Notez que mklink est assez puissant et peut inclure des liens vers des partages réseau et autres.

Puisqu'il semble y avoir une certaine confusion à ce sujet, permettez-moi de clarifier. Je suppose que l'OP parle réellement de jonctions comme illustré ici http://en.wikipedia.org/wiki/NTFS_junction_point . Mklink ne fait pas de jonctions . Cela crée de vrais liens symboliques et je l'ai essayé moi-même et 7zip les respecte parfaitement. De plus, vous devez être administrateur pour créer des liens symboliques mklink.

 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 archivera le Go, mais il n'archivera PAS le GB2. EDIT: En fait, des tests supplémentaires montrent que 7zip archivera les deux répertoires en utilisant la version 4.65. Je n'ai donc aucune idée du problème.

hova
la source
1
Étant donné que tous les liens symboliques d'origine ont été créés avec les API Microsoft et mklik en premier lieu, qu'est-ce que cela résout à part refaire la même chose?
Fire Lancer
2
-1 Comment cela résout-il le problème? Vous venez de décrire comment créer des liens symboliques.
sleske
@hova: Oui, tout cela est vrai (bien que MS n'appelle généralement que les liens symboliques "liens symboliques"; les jonctions ne sont jamais appelées "liens symboliques"). Mais comment cela se rapporte-t-il à la question?
sleske
7zip archive les répertoires SYMLINKD (mklink)!
hova
1
Je viens de faire quelques tests avec 7zip v15.14 (64 bits) sur Windows 7, et il semble que 7zip suit maintenant les liens symboliques de répertoire mais stocke uniquement un fichier vide pour les liens symboliques de fichiers - ce qui n'est pas très utile.
Bigue Nique