파일의 압축을 풀지 않고 zip에 있는 파일의 권한을 수정하는 방법이 있습니까? 명확히 하자면, 파일 내용을 변경하라는 것이 아니라 파일에 설정된 Unix 권한을 변경하라는 것입니다. 파일을 추출하고 업데이트하는 것 외에는 답을 찾지 못했습니다.
답변1
네, 가끔요. 세부 사항을 너무 깊이 다루지 않고도 Zip 파일에는 각 파일에 대한 항목 목록이 있고 마지막에는 이를 요약하는 또 다른 항목이 있습니다. 이러한 항목은 도구(및 해당 버전), 파일 시스템, Zip 형식 등에 따라 파일 권한이 있을 수도 있고 없을 수도 있지만, 파일 권한이 있는 경우 수정할 수 있습니다.
다음 단계는 Debian 10에서 테스트되었습니다.
zip 파일을 만들어 보겠습니다.
$ echo "This is file 1" > file1.txt
$ chmod 777 file1.txt
$ echo "This is file 2" > file2.txt
$ chmod 555 file2.txt
$ zip files file?.txt
그런 다음 파일과 권한을 나열합니다.
$ zipinfo files.zip
Archive: files.zip
Zip file size: 344 bytes, number of entries: 2
-rwxrwxrwx 3.0 unx 15 tx stor 20-Jun-08 18:35 file1.txt
-r-xr-xr-x 3.0 unx 15 tx stor 20-Jun-08 18:30 file2.txt
2 files, 30 bytes uncompressed, 30 bytes compressed: 0.0%
이제 항목을 수동으로 반복할 수 있지만 이미 이 작업을 수행하고 결과를 인쇄하는 프로그램이 있습니다.
$ zipdetail files.zip
이는 많은 정보를 출력합니다. 왼쪽에는 오프셋이 있고 그 옆에는 각 필드의 이름과 내용이 있습니다.
우리는 단지 각 파일을 원합니다 Ext File Attributes
:
$ zipdetails files.zip | egrep "Ext File Attributes|Filename"
001A Filename Length 0009
001E Filename 'file1.txt'
006C Filename Length 0009
0070 Filename 'file2.txt'
00C0 Filename Length 0009
00CA Ext File Attributes 81FF0000
00D2 Filename 'file1.txt'
010F Filename Length 0009
0119 Ext File Attributes 816D0001
0121 Filename 'file2.txt'
이제 ( 오프셋 (십진수 281, 파일 속성 ) 에 대한 파일 속성 ) 을 쓰고 file2.txt
바이트 순서를 고려하여 권한을 수정해 보겠습니다 .777
0x81FF0000
file1.txt
0x0119
file2.txt
$ printf "\x00\x00\xff\x81" | dd of=files.zip bs=1 seek=281 count=4 conv=notrunc
내용을 다시 나열하십시오.
$ zipinfo files.zip
Archive: files.zip
Zip file size: 344 bytes, number of entries: 2
-rwxrwxrwx 3.0 unx 15 tx stor 20-Jun-08 18:35 file1.txt
-rwxrwxrwx 3.0 unx 15 tx stor 20-Jun-08 18:30 file2.txt
2 files, 30 bytes uncompressed, 30 bytes compressed: 0.0%
이제 두 파일 모두 동일한 권한을 공유합니다.
자신만의 권한을 설정하고 싶다면 Zip에 있는 기존 파일에서 복사하거나 확인할 수 있습니다.여기.
답변2
그것은 불가능합니다.
ZIP 파일 형식UNIX 시스템에서 파생되지 않으므로 UNIX 관련 권한 지원이 없습니다.