GNU/Linux >> Belajar Linux >  >> Linux

File zip diperluas dengan garis miring terbalik di Linux, tanpa subdirektori

Itu terjadi karena beberapa alat Windows ternyata menggunakan garis miring terbalik (\ ) sebagai pemisah di mana mereka harus menggunakan garis miring ke depan (/ ). Backslash di Unix bisa menjadi bagian dari nama file atau direktori.

Spesifikasi Format File .ZIP (versi:6.3.5 saat saya menulis ini, direvisi 20 November 2018) menyatakan:

4.4.17.1 Nama file, dengan jalur relatif opsional. Jalur yang disimpan TIDAK BOLEH berisi drive atau huruf perangkat, atau garis miring di depan. Semua garis miring HARUS berupa garis miring ke depan / sebagai kebalikan dari garis miring ke belakang \ untuk kompatibilitas dengan sistem file Amiga dan UNIX, dll. Jika input berasal dari input standar, tidak ada kolom nama file.

File ini disebutkan oleh Microsoft dalam dokumen Mitigation:ZipArchiveEntry.FullName Pemisah Jalur:

Dimulai dengan aplikasi yang menargetkan .NET Framework 4.6.1, pemisah jalur yang digunakan dalam ZipArchiveEntry.FullName properti telah berubah dari garis miring terbalik (\ ) yang digunakan di versi .NET Framework sebelumnya ke garis miring (/ ). [...]

Dampak

Perubahan tersebut membuat implementasi .NET sesuai dengan bagian 4.4.17.1 dari Spesifikasi Format File .ZIP dan memungkinkan arsip .ZIP didekompresi pada sistem non-Windows.

Dekompresi file zip yang dibuat oleh aplikasi yang menargetkan versi .NET Framework sebelumnya pada sistem operasi non-Windows seperti Macintosh gagal mempertahankan struktur direktori. Misalnya, pada Macintosh, ia membuat satu set file yang nama filenya menggabungkan jalur direktori, bersama dengan garis miring terbalik (\ ) karakter, dan nama file. Akibatnya, struktur direktori file yang didekompresi tidak dipertahankan.

Perhatikan bahwa masalah mungkin ada jika pengarsip menggunakan beberapa versi lama .NET Framework atau jika tidak menggunakannya sama sekali tetapi menerapkan pendekatannya sendiri (independen) untuk file zip.

Seseorang mungkin mengalami masalah yang sama dengan rar:Unrar membuat file dengan garis miring terbalik pada nama, bukan hierarki direktori yang tepat.

Anda mungkin menemukan pertanyaan ini di Unix &Linux SE bermanfaat:Mengonversi ZIP buatan Windows ke Linux (masalah jalur internal). Pendekatan saya (agak eksperimental) ada di jawaban ini.


Ini sebenarnya bug di Microsoft.PowerShell.Archive :

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

...yang akan diselesaikan dalam PR ini, dijadwalkan untuk versi 1.2.3:

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

Sementara itu, ini adalah perbaikan cepat (kredit):

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

Linux
  1. Temukan file dan direktori di Linux dengan perintah find

  2. Memindahkan file di Linux tanpa mv

  3. Bekerja dengan file ZIP di Linux

  1. Cara Zip File dan Direktori di Linux (dengan Contoh)

  2. Howto:Pemrograman C dengan File Sementara di Linux

  3. Di Linux/Unix, apakah .tar.gz versus .zip penting?

  1. Cara Unzip File di Linux (dengan Contoh)

  2. Bagaimana cara mendaftar file dengan path lengkap di Linux?

  3. Kemas ulang file 7z ke file zip di linux