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 -r
sinalizador 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 -j
bandeira 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
.