Enlaces simbólicos y 7zip

18

Estoy tratando de comprimir una carpeta en un archivo .7z. Esta carpeta contiene enlaces simbólicos a otras cosas fuera de la carpeta (tanto directorios como archivos).

Aparentemente, 7zip solo archiva el enlace en sí, que no es lo que pretendía. ¿Hay alguna manera de decirle a 7zip que quiero que archive las cosas a las que enlaza, no el enlace en sí? (Es decir, si hay un nombre de enlace simbólico fooque apunta C:\stuff\foo, quiero que incluya el C:\stuff\foodirectorio en el archivo en lugar de foo, no un enlace simbólico de 0 bytes).

¿Hay alguna solución razonable aparte de agregar los archivos y carpetas en cuestión? Hay alrededor de 10,000 archivos referenciados a través de enlaces simbólicos, por lo que agregarlos todos individualmente tomaría horas ... Tal vez hay un programa que crea una carpeta provisional con los archivos reales y luego los pasa a 7zip. O simplemente un archivador que maneja mejor los enlaces simbólicos.

Estoy ejecutando Windows Vista. Todos los enlaces son enlaces simbólicos (por ejemplo, creados con mklink link targety mklink /D link target).

EDITAR:

dir salida de comando para un directorio de prueba más pequeño:

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 creación de un archivo 7z con los resultados de 7zip real file.txtse incluye, pero test file.txtse agrega como un archivo de 0 bytes, aunque el archivo vinculado a existe y es de 50 KB.

Lancer de fuego
fuente
¿Qué sistema operativo estás usando?
Charles Gargent
2
¿La etiqueta "windows" no sugiere que estoy usando, bien windows ...
Fire Lancer
1
Ok, ¿qué versión de Windows estás usando?
Charles Gargent
@ Fire Lancer: en general, es una buena idea repetir cualquier información de las etiquetas en el texto. Más fácil de leer, y no todos miran las etiquetas (ya que están en la parte inferior). Además, las etiquetas pueden ser propensas a malentendidos. Por ejemplo, podría estar en Linux pero quiero interactuar con Windows, así que etiqueto mi pregunta "windows".
sleske
1
Bueno, parece que 7z archiva los directorios <SYMLINKD> y <JUNCTION> pero no los archivos <SYMLINK>, así que supongo que si puede colarse todos sus archivos en un directorio y enlace simbólico que funcionaría
hova

Respuestas:

13

Aparentemente, 7zip solo archiva el enlace en sí mismo, que no es lo que pretendía. ¿Hay alguna manera de decirle a 7zip que quiero que también archive las cosas que enlaza, no el enlace en sí?

No, aparentemente no (desafortunadamente). En realidad, hay un informe de error en 7zip solicitando esto: http://sourceforge.net/tracker/?func=detail&aid=2846755&group_id=14481&atid=114481 pero se abrió en agosto de 2009 y no se tocó desde: - /.

De lo contrario, ¿hay algo razonable a su alrededor, además de agregar los archivos y carpetas en cuestión? Incluyendo las cosas a través del enlace simbólico, hay como 10 000 archivos, la gran mayoría de los cuales son a través de enlaces simbólicos, por lo que agregarlos todos individualmente tomaría horas ...

Bueno, si tiene suficiente espacio (y tiempo), puede hacer una copia de la carpeta, reemplazando los enlaces simbólicos con sus objetivos. Puede, por ejemplo, usar Robocopy y su interruptor /sl:

/ sl Copia el enlace simbólico en lugar del objetivo


Nota: Sólo para evitar confusiones, nota que la acumulación de Linux p7zip (un puerto de 7zip) también tiene un sistema binario 7z, que hace de soporte archivar el archivo apunta un enlace simbólico a (interruptor -l). Sin embargo, 7zip en Windows no tiene este interruptor.

sleske
fuente
Debido a que esta es la respuesta aprobada, quiero señalar que 7zip real lo hace por -lconmutador. zip y gzip también lo hacen con sus comandos específicos.
m3nda
@ erm3nda, ¿dónde ves este cambio? Por favor, proporcione la referencia.
marca
linux.die.net/man/1/7z Hay una opción l, y también hay un interruptor con la misma letra. He notado que esta opción no está presente en la versión de Windows del software.
m3nda
@ erm3nda: Sí, pero ese es p7zip, un puerto de 7zip. Gracias por mencionarlo; Actualicé mi respuesta.
sleske
Gracias a ti también. No puedo creer que a Windows le falte esta característica. Incluso si los enlaces simbólicos en Windows son bastante diferentes, no entiendas por qué es difícil hacer que funcione.
m3nda
-1

Si está utilizando Vista y superior, elimine los enlaces simbólicos y reemplácelos por enlaces mk

mklink /D Directory FullPathToRealDirectory

Tenga en cuenta que mklink es bastante potente y puede incluir enlaces a recursos compartidos de red y similares.

Como parece haber cierta confusión al respecto, permítanme aclararlo. Supongo que el OP en realidad está hablando de Junctions como se ilustra aquí http://en.wikipedia.org/wiki/NTFS_junction_point . Mklink no hace cruces . Hace verdaderos enlaces simbólicos y lo probé yo mismo y 7zip los respeta perfectamente. Además, debe ser administrador para crear enlaces simbólicos 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 archivará GB, pero NO archivará GB2. EDITAR: En realidad, más pruebas muestran que 7zip archivará ambos directorios con la versión 4.65. Así que no tengo idea de cuál es el problema.

hova
fuente
1
Dado que todos los enlaces simbólicos originales se hicieron con las API de Microsoft y mklik en primer lugar, ¿qué resuelve esto además de rehacer lo mismo?
Fire Lancer
2
-1 ¿Cómo resuelve eso el problema? Simplemente describe cómo crear enlaces simbólicos.
sleske
@hova: Sí, eso es cierto (aunque MS generalmente solo llama a los enlaces simbólicos "enlaces simbólicos"; las uniones nunca se denominan "enlaces simbólicos"). Pero, ¿cómo se relaciona esto con la pregunta?
sleske
¡7zip archiva los directorios SYMLINKD (mklink)!
hova
1
Acabo de hacer algunas pruebas con 7zip v15.14 (64 bits) en Windows 7, y parece que 7zip ahora sigue los enlaces simbólicos del directorio pero solo almacena un archivo vacío para enlaces simbólicos de archivos, lo que no es muy útil.
Bigue Nique