it-swarm-korea.com

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

누구라도 알아?

49
user3213

시도해보십시오 :

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

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.

11
Bruce McLeod

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

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

8
Dan Rosenstark

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

8
MSalters

Windows가 Linux 파일 경로 및 이름을 좋아할 필요는 없으므로 다른 사람들이 제안한 것 외에도 파일 및 디렉토리 이름에주의를 기울여야합니다 때로는 압축 할 때 다르게 벗어날 수도 있습니다. 예는 많지만 가장 중요하게는 도트 파일 (. 및 ..), 대소 문자 차이 만있는 파일 (name.txt 및 NAME.txt), 절대 파일 경로 (/tmp/file.txt) ) . Windows에서 파일 이름에 허용되는 다른 문자로 인해 Windows 탐색기를 사용하여 파일을 열 때 문제가 발생할 수 있습니다. 제 경우에는 ':'문자가 거래 차단기 였지만이를 찾기 위해 많은 노력을 기울였습니다.

따라서 많은 매개 변수 사용을 다시 시작하기 전에 간단한 절차를 따르는 것이 좋습니다.

  1. 압축 한 폴더 나 파일을 찾습니다.

  2. 실행 : Zip -9 -r -k Zip 수정 된 이름 .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에서 열리지 만 여전히 읽을 수 있습니다.

4
Shakus

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

3
Nicholas Hardy

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

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

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

 zip 파일 가져 오기 
 import glob, os, sys 
 
 class ZipArchive : 
 
 def Zip_it (self, dirName, files) : 
 dirNamePrefix = dirName + "/ *"
 glob.glob (dirNamePrefix)의 파일 이름 : 
 os.path.isfile (filename) 및 (self.exclude_svn 또는 (가 아닌) filename.find ( ". svn \\") ==-1)) : 
 print filename 
 name = filename [len (self.folder) +1 :] 
 self .archive.write (파일 이름, 이름, zipfile.Zip_DEFLATED) 
 
 def run (자체, 폴더, 이름, 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 () 
 
 if __name__ == "__main __": 
 if (len (sys.argv) == 1) : 
 print "use zipit folder [name] [svn : yes | no]"
 else : 
 name = sys.argv [1] 
 exclude_svn = False 
 
 if (len (sys.argv)> 2) : name = sys.argv [2] 
 (len (sys.argv)> 3) 인 경우 : exclude_svn = (sys.argv [3] == "no") 
 
 Arch = ZipArchive () 
 아치. run (sys.argv [1], 이름, exclude_svn) 
 print "done"
 
2
luc

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

0