Preservando permissões durante a compactação

Preservando permissões durante a compactação

Como posso preservar as permissões ao compactar uma pasta usando zip?

Eu sei como preservar links simbólicos usando --symlinks. Existe uma opção semelhante para permissões?

Responder1

info-zip (o programa que você provavelmente está usando) pode salvar/restaurar permissões paraUnix-sistemas semelhantes.

É mencionado paradiretóriosnopágina de manual:

Datas, horários e permissões de diretórios armazenados não são restaurados, exceto no Unix. (No Windows NT e sucessores, os carimbos de data/hora agora são restaurados.)

As permissões de arquivo para leitura/gravação/execução são salvas/restauradas. Mas uma verificação rápida mostra (zip 3.0) que as permissões setuid/setgid não são preservadas.

O recurso não é opcional; zip/unzip simplesmente faça isso quando puder.

Em outros sistemas, a capacidade de salvar/restaurar permissões é menos completa. Por exemplo, no Windows, o arquivo ZIP usa as configurações de permissão do%temp%pasta.

Leitura adicional:

Responder2

Info-Zip 3.0 SUPORTA a preservação de arquivos/diretórios, permissões UNIX e dados de propriedade UID/GID. ziparmazena-o por padrão, mas você precisa usá-lo unzipde uma maneira especial para restaurá-los:

  • unzipdeve ser usado com a -Xbandeira.
  • unzipdeve ser executado como rootpara definir o UID/GID dos arquivos/diretórios. Se você executá-lo como um usuário normal, o UID será sempre o do usuário atual e o GID será restaurado SOMENTE SE o usuário atual pertencer a esse grupo.

Exemplo:

# zip -v | head -2 | tail -1
This is Zip 3.0 (July 5th 2008), by Info-ZIP.

# unzip -v | head -1
UnZip 6.00 of 20 April 2009, by Debian. Original by Info-ZIP.

# touch file1
# mkdir dir1
# chmod 000 file1
# chown 1111 dir1
# ls -ld file1 dir1
drwxr-xr-x 2 1111 root 40 mar 28 20:12 dir1
---------- 1 root root  0 mar 28 20:12 file1

# zip files.zip file1 dir1
  adding: file1 (stored 0%)
  adding: dir1/ (stored 0%)

# unzip -X files.zip -d extracted
Archive:  files.zip
 extracting: extracted/file1         
   creating: extracted/dir1/

# ls -l extracted
total 0
drwxr-xr-x 2 1111 root 40 mar 28 20:12 dir1
---------- 1 root root  0 mar 28 20:12 file1

Nota: você também pode usar unzipcom o -Ksinalizador para restaurar bits SUID/SGID/Sticky.

Responder3

Resposta curta: você não pode! zipnão preserva permissões de arquivo.

Leia mais sobre issoaquieaqui.

Se você precisar preservar as permissões, considere usar taro --preserve-permissionsswitch.

informação relacionada