LinuxでWindowsと互換性のあるzipファイルを作成する方法


49

すべてのWindowsユーザーの訪問者がzipファイルを使用できるようにする必要があるため、Unix zipコマンドを使用して単純にzipファイルを作成しました(madeinlinux.zipと呼びましょう)。

WinRarまたはWinzipで正常に開きますが、標準のWindows zipファイル処理を使用しているユーザーは、解凍しようとすると失敗します。(Windows XP)

Windowsの組み込みzipメカニズムを使用して同じデータを圧縮しましたが、Linuxの観点からは、ファイルタイプに違いは見られません。

$ file madeinlinux.zip :  Zip archive data, at least v2.0 to extract
$ file madeinwindows.zip : Zip archive data, at least v2.0 to extract

それらは、Windows互換のzipファイルに固有のものでなければなりません。

誰もが知っていますか?


1
これらのZIPファイルのいずれか(ダミーコンテンツを含む)を作成し、ダウンロードして検査できるようにサーバーに配置してもらえますか?
ベルンハルトホフマン

これは、superuser.comが存在する場合のケースのように聞こえます。

1
確かにベルンハルトは、ここに犯人だ:careerjet.co.uk/devel/Services_Careerjet.zip

テストしなければならなかったWindowsマシンはWindows 7のみであり、エクスプローラーを使用してファイルを開いたり抽出したりするのに問題はありませんでした。

h窓7!

回答:


28

で試してください:

zip -9 -y -r -q file.zip folder/
  • -9 最も遅い圧縮速度を示します(最適な圧縮、サフィックスリストは無視されます)
  • -y リンクが参照するファイルを圧縮して保存する代わりに、zipアーカイブにシンボリックリンクを保存します
  • -r ディレクトリ構造を再帰的に移動する
  • -q 静かなモード

これがXP互換性に役立つのはなぜですか?
Wowfunhappy

正直なところ、はっきりと覚えていないのはかなり前のことです。しかし、シンボリックリンクをたどると問題が発生する可能性があり(それがなくても発生する可能性があります-r)、-rすべてのフォルダーコンテンツを取得できることが想像できます
Igor Fobia

11

7zipは、Linux、FreeBSD、Mac OS X、BeOS、DOS、Amiga、Windowsで動作するオープンソースの圧縮ツールです。

Windowsバージョンに基づいてそれを強くお勧めします。

サポートします

梱包/開梱:7z、ZIP、GZIP、BZIP2、TAR

開梱のみ:ARJ、CAB、CHM、CPIO、DEB、DMG、HFS、ISO、LZH、LZMA、MSI、NSIS、RAR、RPM、UDF、WIM、XARおよびZ


8
すべてのプラットフォームで現在利用可能なこの信じられないほど一般的なユーティリティ(ファイルを圧縮する)に、さらに別のサードパーティの専用ツールを使用しないことをお勧めします。
リックオシェイ

8

関連するように見えるのはこれだけです

-k - Attempt  to  convert  the  names  and paths to conform to MSDOS, store only the MSDOS attribute (just the user write attribute from UNIX), and mark the entry as made under
MSDOS (even though it was not); for compatibility with PKUNZIP under MSDOS which cannot handle certain names such as those with two dots.

しかし、どこかに行く前にシステムで「man zip」を読んでください...


1
こんにちは。提案はThxですが、この-kオプションを使用すると、時間がかかりすぎます。すべてのファイル名を8文字/大文字と小文字なしのバージョンに変換します:(

ええ、私は当時を覚えています。しかし、Windowsの組み込みのZipプログラムでファイルを読み取るのに役立ちましたか?

わからない。このファイル名の問題がしようとして私を停止

MSaltersが言うように私の推測では...、それは圧縮だということです

8

zip -Z圧縮オプションを設定します。-Z storeまったく圧縮されないため、最も簡単なものです。これはzip、の代替として使用しているtarとき、またはトラブルシューティングを行うときに役立ちます。この場合、Windowsから非圧縮アーカイブが使用可能かどうかを確認する必要があります。それ使用可能であれば、デフォルト以外の圧縮オプションを選択する必要があることがわかります。


素晴らしい、私はそれが...あまりにもトラブルを起こしている圧縮アルゴリズムだと思うだろう

4

他の人が示唆したことに加えて、Windowsは必ずしもLinuxファイルのパスと名前を好まないので、ファイル名とディレクトリ名に注意を払うことが重要です。また、zip圧縮するときに、異なる方法でエスケープされることもあります。例は多数ありますが、最も重要なのは、ドットファイル(。と..)、大文字と小文字の違いのみがあるファイル(name.txtとNAME.txt)、絶対ファイルパス(/tmp/file.txt)です。Windowsのファイル名に許可されている他のいくつかの文字は、Windowsエクスプローラーを使用してファイルを開くときに問題を引き起こす可能性があります。私の場合、「:」という文字がディールブレーカーでしたが、これを見つけるために多くの作業を要しました。

したがって、多くのパラメータを使用して使用を再開する前に、簡単な手順に従うことをお勧めします。

  1. 圧縮したフォルダーまたはファイルを見つけます。

  2. 実行: zip -9 -r -k zip-modified-names.zip / path / to / your / folder

  3. コンソールの出力に注意してください。 私の場合、ファイル名の「:」は削除されました。
  4. zipファイルをWindowsマシンに移動して、開こうとします。

これが機能する場合は、ファイル/ディレクトリ名から-kオプションで削除された文字を削除した方が良いかもしれません。 -kなどの一部のパラメーターには副作用があることに注意してください。 この場合、-kは-qオプションと矛盾します(symリンクの場合)。

また、-kオプションを使用すると、ファイル名が読めなくなる可能性があります。私の場合、アーカイブから必要なレコードを簡単に見つけられるように、作成時間に基づいてファイルに名前を付けました(例:10:55:39.pdf)が、-kオプションを使用すると105539.pdfになり、ユーザーが読みにくくなりました。したがって、名前を10_55_39.pdfに変更しました。これは、-kオプションを使用せずにWindowsで開きますが、それでも読み取り可能です。


1
@ TD.512 6年前の質問にはまだ明確な答えがないことに気づきましたか?他の人が助けなかったように答えが誰かを助けるようである場合、別の答えを追加するのが最善です。
ハイエンジェル

3

最近、perlスクリプトから生成されたファイルで同様の問題が発生しました。ネイティブのWindows zip(テスト済みのWindows 7のみ)が、先頭にスラッシュが付いたパスを誤って処理し、空のzipファイルを表示することがわかりました。解決策は、ファイルを追加する前に先頭のスラッシュを削除することでした。おそらく、いくつかのバージョンのlinux zipコマンドは、ファイルパスを先頭のスラッシュで保存します。


2
アプリによると。pkwareサイトに関するメモ(pkware.com/support/zip-app-note/archives):「オプションの相対パスを使用したファイルの名前。保存されるパスには、ドライブまたはデバイスの文字、または先頭のスラッシュを含めないでください。 」
EKW

2

これは、いくつかのファイルを圧縮するために使用しているPythonスクリプトです。UbuntuとVistaでテストされています。Ubuntuで生成されたzipがVistaジッパーで開きます。

私は過去に同様の問題を抱えていたと思いますが、それはzip形式がZIP_DEFLATEDではなかったためでした。私はわかりません。確認します。

私はそれが役立つことを願っています

zipファイルをインポート
glob、os、sysをインポートする

クラスZipArchive:

    def zip_it(self、dirName、files):
        dirNamePrefix = dirName + "/ *"
        glob.glob(dirNamePrefix)のファイル名の場合:
            os.path.isfile(filename)および(self.exclude_svnまたは(filename.find( "。svn \\")==-1)ではない場合):
                印刷ファイル名
                name = filename [len(self.folder)+1:]
                self.archive.write(ファイル名、名前、zipfile.ZIP_DEFLATED)

    def run(self、folder、name、exclude_svn):
        self.exclude_svn = exclude_svn
        self.folder =フォルダー
        self.archive = zipfile.ZipFile(name + "。zip"、 "w")
        os.path.walk(self.folder、ZipArchive.zip_it、self)
        self.archive.close()

__name__ == "__main__"の場合:
    if(len(sys.argv)== 1):
        print "usage zipit folder [name] [svn:yes | no]"
    その他:
        名前= sys.argv [1]
        exclude_svn = False

        if(len(sys.argv)> 2):name = sys.argv [2]
        if(len(sys.argv)> 3):exclude_svn =(sys.argv [3] == "no")

        arch = ZipArchive()
        arch.run(sys.argv [1]、名前、exclude_svn)
        「完了」を印刷


問題は、Windowsのzipメカニズムを使用して解凍できるかどうかです。

はい。Vistaのzipツールで開きました。私もそれがあなたのために働くことを願っています

0

LinuxからWindowsへのファイル転送に問題がある可能性があります。FTPを使用している場合は、バイナリ転送を設定してみてください(LinuxからWindowsにファイルを転送する前に、Windowsのbinコマンド)。


同意しない。特に古いバージョンのWindowsでは、OPと同様の問題に遭遇しました。整合性チェックとshasumの一致を確認しました。さらに、OPはファイルがサードパーティのプログラムで適切に解凍されると言うことに注意してください。
Wowfunhappy
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.