Linux에서 Windows와 호환되는 zip 파일을 작성하는 방법


49

모든 Windows 사용자 방문자가 zip 파일을 사용할 수 있도록해야하므로 Unix zip 명령을 사용하여 zip 파일을 순진하게 생성했습니다 (madeinlinux.zip이라고 함).

WinRar 또는 Winzip으로 성공적으로 열리지 만 표준 Windows zip 파일 처리를 사용하는 사용자의 압축을 풀 때 오류가 발생합니다. (윈도우 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 파일 중 하나 (더미 컨텐츠 포함)를 생성하여 서버에 다운로드하여 검사 할 수 있습니까?
Bernhard Hofmann

superuser.com (있는 경우)의 경우처럼 들립니다.

1
물론 bernhard, 여기에 범인이 있습니다 : careerjet.co.uk/devel/Services_Careerjet.zip

테스트해야 할 유일한 Windows 컴퓨터는 Windows 7 컴퓨터였으며 탐색기를 사용하여 파일을 열고 추출하는 데 아무런 문제가 없었습니다.

우박 창 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
모든 플랫폼에서 사용할 수있는이 믿을 수 없을 정도로 일반적인 유틸리티 (파일 압축)에는 다른 타사 독점 도구를 사용하지 않는 것이 좋습니다.
Rick O'Shea

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 파일 경로 및 이름을 좋아하지 않으므로 파일 및 디렉토리 이름에주의를 기울여야 합니다. 때로는 압축 할 때 다르게 탈출하기도합니다. 예는 많지만 가장 중요한 점 파일 (. 및 ..), 대소 문자 차이 만있는 파일 (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 년 된 질문에 여전히 명확한 답이 없다는 것을 알고 계셨습니까? 다른 사람이하지 않은 다른 사람에게 도움이되는 것처럼 보일 경우 다른 답변을 추가하는 것이 가장 좋습니다.
Hi-Angel

3

최근에 perl 스크립트에서 생성 된 파일과 비슷한 문제가있었습니다. 기본 Windows zip (테스트 된 Windows 7 전용)은 슬래시가있는 경로를 잘못 처리하고 빈 zip 파일을 표시합니다. 해결책은 파일을 추가하기 전에 슬래시를 제거하는 것이 었습니다. linux zip 명령의 일부 버전은 슬래시가있는 파일 경로를 저장합니다.


2
앱에 따르면. pkware 사이트 ( pkware.com/support/zip-app-note/archives ) 에 대한 참고 사항 : "선택적 상대 경로가있는 파일 이름. 저장된 경로에는 드라이브 또는 장치 문자 또는 선행 슬래시가 포함되지 않아야합니다. "
EKW

2

다음은 일부 파일을 압축하는 데 사용하는 Python 스크립트입니다. 우분투와 비스타에서 테스트되었습니다. Ubuntu에서 생성 된 지퍼는 Vista 지퍼로 열립니다.

나는 과거에 비슷한 문제가 있었고 ZIP 형식이 ZIP_DEFLATED가 아니기 때문이라고 생각합니다. 확실하지 않습니다. 확인하겠습니다.

나는 그것이 도움이되기를 바랍니다

zip 파일 가져 오기
glob, os, sys 가져 오기

ZipArchive 클래스 :

    데프 zip_it (자체, dirName, 파일) :
        dirNamePrefix = dirName + "/ *"
        glob.glob (dirNamePrefix)의 파일 이름 :
            os.path.isfile (파일 이름) 및 (self.exclude_svn 또는 (filename.find ( ". svn \\") ==-1))이 아닌 경우 :
                파일명 인쇄
                이름 = 파일명 [len (self.folder) +1 :]
                self.archive.write (파일 이름, 이름, zipfile.ZIP_DEFLATED)

    데프 실행 (자체, 폴더, 이름, exclude_svn) :
        self.exclude_svn = exclude_svn
        self.folder = 폴더
        self.archive = zipfile.ZipFile (이름 + ". zip", "w")
        os.path.walk (self.folder, ZipArchive.zip_it, self)
        self.archive.close ()

__name__ == "__main__"인 경우 :
    (len (sys.argv) == 1) 인 경우 :
        print "zipit 폴더 사용 [이름] [svn : yes | no]"
    그밖에:
        이름 = sys.argv [1]
        exclude_svn = 거짓

        (len (sys.argv)> 2) 인 경우 : 이름 = sys.argv [2]
        (len (sys.argv)> 3) 인 경우 : exclude_svn = (sys.argv [3] == "no")

        아치 = ZipArchive ()
        arch.run (sys.argv [1], 이름, exclude_svn)
        "완료"인쇄


문제는 Windows zip 메커니즘을 사용하여 압축을 풀 수 있습니까?

예. Vista zip 도구로 열었습니다. 나는 그것이 당신에게도 효과가 있기를 바랍니다

0

Linux에서 Windows 로의 파일 전송에 문제가있을 수 있습니다. FTP를 사용하는 경우 이진 전송을 설정하십시오 (Windows에서 파일을 Linux에서 Windows로 전송하기 전에 bin 명령).


동의하지 않는다. 특히 오래된 Windows 버전에서 OP와 비슷한 문제가 발생했습니다. 무결성 검사를 수행하고 shasum의 일치를 확인했습니다. 또한 OP는 타사 프로그램에서 파일이 제대로 압축 해제된다고 말합니다.
Wowfunhappy
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.