GNU/Linux >> Linux の 問題 >  >> Linux

Linux では、Zip ファイルはバックスラッシュで展開され、サブディレクトリはありません

これは、一部の Windows ツールがバックスラッシュ (\) を使用しているように見えるために発生します。 ) スラッシュ (/) を使用する必要がある区切り記号として )。 Unix のバックスラッシュは、ファイルまたはディレクトリ名の一部にすることができます。

.ZIP ファイル形式の仕様 (これを書いているときのバージョン:6.3.5、2018 年 11 月 20 日に改訂) には次のように記載されています。

<ブロック引用>

4.4.17.1 オプションの相対パスを含むファイルの名前。保存されるパスには、ドライブ文字、デバイス文字、または先頭のスラッシュを含めてはなりません。すべてのスラッシュはスラッシュ / でなければなりません 逆スラッシュ \ とは対照的に Amiga や UNIX ファイル システムなどとの互換性のためです。入力が標準入力から来た場合、ファイル名フィールドはありません。

このファイルは、Microsoft のドキュメント Mitigation:ZipArchiveEntry.FullName で言及されています。 パス区切り:

<ブロック引用>

.NET Framework 4.6.1 を対象とするアプリ以降、ZipArchiveEntry.FullName で使用されるパス区切り記号 プロパティがバックスラッシュから変更されました (\ ) .NET Framework の以前のバージョンで使用されていたスラッシュ (/) )。 [...]

インパクト

この変更により、.NET 実装が .ZIP ファイル形式仕様のセクション 4.4.17.1 に準拠し、Windows 以外のシステムで .ZIP アーカイブを解凍できるようになります。

Macintosh などの Windows 以外のオペレーティング システムで以前のバージョンの .NET Framework を対象とするアプリで作成された zip ファイルを解凍すると、ディレクトリ構造が保持されません。たとえば、Macintosh では、バックスラッシュ (\ ) 文字、およびファイル名。その結果、解凍されたファイルのディレクトリ構造は保持されません。

アーカイバーが古いバージョンの .NET Framework を使用した場合、またはそれをまったく使用せずに独自の (独立した) zip ファイルへのアプローチを実装した場合、問題が存在する可能性があることに注意してください。

rar で同じ問題が発生する可能性があります:Unrar は、適切なディレクトリ階層ではなく、名前にバックスラッシュを含むファイルを作成します。

Unix および Linux SE に関するこの質問が役立つ場合があります:Convert a Windows-created ZIP to Linux (internal paths issue)。私の(やや実験的な)アプローチは、この回答にあります。


これは実際には Microsoft.PowerShell.Archive のバグです :

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

...これは、バージョン 1.2.3 で予定されているこの PR で解決されます:

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

それまでの間、これは簡単な修正です (クレジット):

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

Linux
  1. findコマンドを使用してLinux上のファイルとディレクトリを検索します

  2. Linux/Unix では、.tar.gz と .zip はどちらが重要ですか?

  3. Linuxで7zファイルをzipファイルに再パック

  1. Linuxでmvなしでファイルを移動する

  2. Linuxでファイルとディレクトリを圧縮する方法(例付き)

  3. Linuxでファイルを解凍する方法(例付き)

  1. LinuxでZIPファイルを操作する

  2. Howto:Linux での一時ファイルを使用した C プログラミング

  3. Linux でフル パスを含むファイルを一覧表示するにはどうすればよいですか?