Respostas:
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 :
-j --junk-paths Store just the name of a saved file (junk the path), and do not store directory names. By default, zip will store the full path (relative to the current directory).
E esse comando?
$ cd somedir ; zip -r ../zipped.zip . * ; cd ..
cd
. Esperava que houvesse uma maneira de especificar o caminho armazenado com mais precisão.
Espero que isto ajude.
(cd directory && zip -r ../out.zip .)
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.