Então, se eu entendi direito, você está tentando arquivar os arquivos e pastas em uma pasta específica, mas sem incluir a pasta raiz.
Exemplo:
/test/test.txt
/test/test2.txt
onde test.txt e test2.txt seriam armazenados no zip, mas não / test /
Você pode entrar no diretório / test / e depois executar algo como,
zip -r filename.zip ./*
O que criaria um arquivo na mesma pasta denominada filename.zip. Ou, se estiver executando-o de fora da pasta, você poderá executar,
zip -r test.zip test/*
O / * é a parte que inclui apenas o conteúdo da pasta, em vez da pasta inteira.
Edit: OP queria vários zips, solução acabou sendo um pouco de hack, estou curioso para saber se existe uma maneira melhor de fazer isso.
for d in */ ; do base=$(basename "$d") ; cd $base ; zip -r $base * ; mv "${base}.zip" .. ; cd .. ; done;
for d in */ ; do base=$(basename "$d") ; zip -rj "${base}.zip" "$d" ; done;
zip -r test.zip test/*
não funciona. existe alguma maneira correta de conseguir isso fora do diretório?Use a opção
-j
ou--junk-paths
no seu comando zip.Na página do manual zip :
fonte
E esse comando?
fonte
cd
. Esperava que houvesse uma maneira de especificar o caminho armazenado com mais precisão.Espero que isto ajude.
Ele mantém o shell principal no mesmo diretório e altera apenas o diretório do sub shell que morre após o comando.
fonte