GNU/Linux >> Linux Esercitazione >  >> Linux

I file zip si espandono con barre rovesciate su Linux, senza sottodirectory

Succede perché alcuni strumenti di Windows usano apparentemente barre rovesciate (\ ) come separatori dove dovrebbero usare le barre (/ ). La barra rovesciata in Unix può far parte del nome di un file o di una directory.

.ZIP File Format Specification (versione:6.3.5 quando sto scrivendo questo, rivista il 20 novembre 2018) afferma:

4.4.17.1 Il nome del file, con percorso relativo facoltativo. Il percorso memorizzato NON DEVE contenere una lettera di unità o dispositivo o una barra iniziale. Tutte le barre DEVONO essere barre in avanti / al contrario delle barre rovesciate \ per la compatibilità con i file system Amiga e UNIX ecc. Se l'input proviene da standardinput, non c'è il campo del nome del file.

Questo file è menzionato da Microsoft in un documento Mitigation:ZipArchiveEntry.FullName Separatore di percorso:

A partire dalle app destinate a .NET Framework 4.6.1, il separatore di percorso utilizzato in ZipArchiveEntry.FullName proprietà è stata modificata dalla barra rovesciata (\ ) utilizzato nelle versioni precedenti di .NET Framework in una barra (/ ). [...]

Impatto

La modifica rende l'implementazione di .NET conforme alla sezione 4.4.17.1 della specifica del formato di file .ZIP e consente la decompressione degli archivi .ZIP su sistemi non Windows.

La decompressione di un file zip creato da un'app destinata a una versione precedente di .NET Framework su sistemi operativi diversi da Windows come Macintosh non riesce a preservare la struttura della directory. Ad esempio, su Macintosh, crea un insieme di file il cui nome file concatena il percorso della directory, insieme a qualsiasi barra rovesciata (\ ) e il nome del file. Di conseguenza, la struttura delle directory dei file decompressi non viene preservata.

Nota che il problema potrebbe esistere se l'archiviatore utilizzava una vecchia versione di .NET Framework o se non lo utilizzava affatto ma implementava il proprio approccio (indipendente) ai file zip.

Si potrebbe riscontrare lo stesso problema con rar:Unrar crea file con barre rovesciate nei nomi invece della corretta gerarchia di directory.

Potresti trovare utile questa domanda su Unix e Linux SE:Converti un ZIP creato da Windows in Linux (problema di percorsi interni). Il mio approccio (in qualche modo sperimentale) è in questa risposta.


Questo è in realtà un bug in Microsoft.PowerShell.Archive :

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

...che verrà risolto in questo PR, previsto per la versione 1.2.3:

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

Nel frattempo, questa è una soluzione rapida (credito):

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

Linux
  1. Come comprimere file e directory su Linux (con esempi)

  2. Come decomprimere i file in Linux (con esempi)

  3. Lavora con i file ZIP in Linux

  4. Howto:Programmazione in C con file temporanei in Linux

  5. Reimballare i file 7z in file zip in Linux

Linux:come condividere file su una rete locale con woof

Comando Linux WC con esempi

Come rinominare uno o più file in Linux

Suggerimenti Vim:modifica file remoti con Vim su Linux

Come comprimere un file in Linux

Come creare file zip o directory protetti da password in Linux