Linux에서 Windows와 호환되는 zip 파일을 작성하는 방법 사용하는 사용자의 압축을 풀 때

모든 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 파일과 관련된 것이어야합니다.

누구라도 알아?



답변

시도해보십시오 :

zip -9 -y -r -q file.zip folder/
  • -9 가장 느린 압축 속도를 나타냅니다 (최적 압축, 접미사 목록 무시)
  • -y 링크가 참조하는 파일을 압축하고 저장하는 대신 Zip 아카이브에 기호 링크를 저장하십시오.
  • -r 디렉토리 구조를 재귀 적으로 이동
  • -q 저소음 모드

답변

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.


답변

관련성이있는 것만이 이것입니다

-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”을 읽으십시오.


답변

zip -Z압축 옵션을 설정합니다. -Z store전혀 압축되지 않기 때문에 가장 사소한 것입니다. 이는 zip의 대안으로 사용 tar하거나 문제를 해결할 때 유용합니다 . 이 경우 Windows에서 압축되지 않은 아카이브를 사용할 수 있는지 확인해야합니다. 그 경우 입니다 사용할 수, 당신은 기본이 아닌 압축 옵션을 선택해야합니다 것을 알고있다.


답변

다른 사람들이 제안한 것 외에도 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에서 열리지 만 여전히 읽을 수 있습니다.


답변

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


답변

다음은 일부 파일을 압축하는 데 사용하는 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)
        "완료"인쇄