Zipar preservando diretórios relativos de qualquer lugar

0

Tentando obter uma funcionalidade específica de zip . Gostaria de compactar tudo de forma recursiva em um diretório específico e preservar a estrutura de diretórios dentro do diretório JUST, mas não ter o caminho completo como parte do archive.

Digamos que eu tenha /path/to/test/tmp/ e quero que tudo em tmp/ seja compactado como se eu estivesse executando o comando de dentro dessa pasta.

O sinal -r obtém o que eu quero, mas inclui informações de caminho acima do diretório de que preciso, dependendo de onde eu o executo:

user@MBP:~/path/to/test$ zip -r myarchive.zip tmp/
  adding: tmp/foo.txt (deflated 68%)
  adding: tmp/bar/bar.txt (deflated 41%)
  adding: tmp/baz/baz/baz.txt (deflated 92%)

A sinalização -j corta tudo menos os nomes dos arquivos:

user@MBP:~/path/to/test$ zip -rj myarchive.zip tmp/
  adding: foo.txt (deflated 68%)
  adding: bar.txt (deflated 41%)
  adding: baz.txt (deflated 92%)

O que eu preciso é algo que me dê isso:

adding: foo.txt (deflated 68%)
adding: bar/bar.txt (deflated 41%)
adding: baz/baz/baz.txt (deflated 92%)

Mas isso eu posso especificar para ser executado em qualquer lugar. Eu estou tentando script isso em um cron. Não consigo encontrar o que estou procurando na página do manual . Como posso fazer isso, além de realmente alterar diretórios no meu script?

    
por cognoscente 02.03.2018 / 03:22

1 resposta

1

Parece que zip (pelo menos a versão do Info-ZIP que está na minha plataforma) não permite que você faça isso. (Ao contrário de tar , que tem a opção -C / --directory , como @ Xen2050 sugerido.)

Mas, eu tenho que perguntar, é tão ruim mudar diretórios em seu script? Especialmente se você puder fazê-lo em um subshell e não afetar o diretório de trabalho atual do script (explicado em detalhes nesta resposta SO ):

pwd
(cd /path/to/test/tmp; zip -r myarchive.zip .)
pwd    # prints the same as in line 1

Tome nota de que isso armazenará o arquivo Zip final em /path/to/test/tmp .

    
por 02.03.2018 / 08:43

Tags