GNU/Linux >> Tutoriales Linux >  >> Linux

Los archivos zip se expanden con barras invertidas en Linux, sin subdirectorios

Ocurre porque algunas herramientas de Windows aparentemente usan barras invertidas (\ ) como separadores donde deberían usar barras inclinadas (/ ). La barra invertida en Unix puede ser parte del nombre del archivo o directorio.

Especificación de formato de archivo .ZIP (versión:6.3.5 cuando escribo esto, revisada el 20 de noviembre de 2018) establece:

4.4.17.1 El nombre del archivo, con la ruta relativa opcional. La ruta almacenada NO DEBE contener una letra de unidad o dispositivo, o una barra diagonal inicial. Todas las barras DEBEN ser barras diagonales / a diferencia de las barras inclinadas hacia atrás \ para la compatibilidad con los sistemas de archivos Amiga y UNIX, etc. Si la entrada proviene de una entrada estándar, no hay un campo de nombre de archivo.

Microsoft menciona este archivo en un documento Mitigación:ZipArchiveEntry.FullName Separador de rutas:

A partir de las aplicaciones destinadas a .NET Framework 4.6.1, el separador de ruta utilizado en el ZipArchiveEntry.FullName la propiedad ha cambiado desde la barra invertida (\ ) utilizado en versiones anteriores de .NET Framework a una barra inclinada (/ ). [...]

Impacto

El cambio pone la implementación de .NET en conformidad con la sección 4.4.17.1 de la Especificación de formato de archivo .ZIP y permite que los archivos .ZIP se descompriman en sistemas que no sean Windows.

La descompresión de un archivo zip creado por una aplicación que tiene como destino una versión anterior de .NET Framework en sistemas operativos distintos de Windows, como Macintosh, no conserva la estructura del directorio. Por ejemplo, en Macintosh, crea un conjunto de archivos cuyo nombre de archivo concatena la ruta del directorio, junto con cualquier barra invertida (\ ) caracteres y el nombre del archivo. Como resultado, la estructura de directorios de los archivos descomprimidos no se conserva.

Tenga en cuenta que el problema puede existir si el archivador usó alguna versión antigua de .NET Framework o si no la usó en absoluto pero implementó su propio enfoque (independiente) para los archivos zip.

Uno puede experimentar el mismo problema con rar:Unrar crea archivos con barras invertidas en los nombres en lugar de la jerarquía de directorios adecuada.

Puede encontrar útil esta pregunta sobre Unix y Linux SE:Convertir un ZIP creado en Windows a Linux (problema de rutas internas). Mi enfoque (algo experimental) está en esta respuesta.


Esto es en realidad un error en Microsoft.PowerShell.Archive :

https://github.com/PowerShell/Microsoft.PowerShell.Archive/issues/48

...que se resolverá en este PR, programado para la versión 1.2.3:

https://github.com/PowerShell/Microsoft.PowerShell.Archive/pull/62

Mientras tanto, esta es una solución rápida (crédito):

for file in *\\*; do target="${file//\\//}"; mkdir -p "${target%/*}"; mv -v "$file" "$target"; done

Linux
  1. Encuentra archivos y directorios en Linux con el comando de búsqueda

  2. Mover archivos en Linux sin mv

  3. Trabajar con archivos ZIP en Linux

  4. Howto:Programación en C con archivos temporales en Linux

  5. En Linux/Unix, ¿importa .tar.gz versus .zip?

Linux:Cómo compartir archivos en una red local con guau

Comando WC de Linux con ejemplos

Cómo cambiar el nombre de un archivo (s) en Linux

Consejos de Vim:edite archivos remotos con Vim en Linux

Cómo comprimir un archivo en Linux

Cómo crear archivos zip o directorios protegidos con contraseña en Linux