Compactando enquanto preserva diretórios relativos de qualquer lugar

Compactando enquanto preserva diretórios relativos de qualquer lugar

Tentando obter uma funcionalidade específica do zip. Gostaria de compactar tudo recursivamente em um diretório específico e preservar a estrutura de diretórios APENAS desse diretório, mas não fazer com que o caminho totalmente qualificado faça parte do arquivo.

Digamos que sim /path/to/test/tmp/e quero que tudo tmp/seja compactado como se eu estivesse executando o comando nessa pasta.

O -rsinalizador obtém o que desejo, mas inclui informações de caminho acima do diretório necessário, 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 -jbandeira corta tudo, exceto 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 é de 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 posso especificar para ser executado de qualquer lugar. Estou tentando fazer o script disso em um cron. Não consigo encontrar o que procuro nopágina de manual. Como posso fazer isso, além de alterar os diretórios no meu script?

Responder1

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 sugeriu.)

Mas, devo perguntar, é tão ruim assim mudar de diretório no seu script? Especialmente se você puder fazer isso em um subshell e não afetar o diretório de trabalho atual do script (explicado em detalhesnesta resposta SO):

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

Observe que isso armazenará o arquivo Zip final no formato /path/to/test/tmp.

informação relacionada