Alterar diretório de trabalho

13

Estou tentando compactar um diretório em

/home/cyrus/sql

E eu queria alterar o diretório de trabalho ao fechar a pasta:

/ $ zip -b /home/cyrus sql.zip /home/cyrus/sql

Mas quando eu verifico o arquivo zip:

/ $ unzip -l sql.zip

Archive:  sql.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
        0  2013-05-30 10:59   home/cyrus/sql/
  1776642  2013-05-23 10:22   home/cyrus/sql/wordpress.sql
---------                     -------
  1776642                     2 files

A pasta raiz deveria ter sido sql. O que eu fiz errado?

Jürgen Paul
fonte

Respostas:

10

De man zip:

-b path

 --temp-path path

Use o caminho especificado para o arquivo zip temporário. Por exemplo:

zip -b /tmp stuff *

colocará o arquivo zip temporário no diretório / tmp, copiando o arquivo stuff.zip para o diretório atual quando terminar. Essa opção é útil ao atualizar um arquivo existente e o sistema de arquivos que contém esse arquivo antigo não possui espaço suficiente para armazenar os arquivos antigos e novos ao mesmo tempo. Também pode ser útil ao transmitir em alguns casos, para evitar a necessidade de descritores de dados. Observe que o uso dessa opção pode exigir um tempo extra para copiar o arquivo morto quando terminar no sistema de arquivos de destino.

Por padrão, ziparmazena o caminho completo em relação ao diretório atual. Se você deseja que seu zipfile tenha seu sqldiretório como raiz, será necessário executar o comando no /home/cyrusdiretório

MattDMo
fonte
14

Se você deseja zipo conteúdo de um determinado diretório e armazena o ziparquivo no diretório atual, pode escrevê-lo:

(cd /some/dir && zip -r - dir-there) > file.zip
Stéphane Chazelas
fonte
5

-bespecifica onde zipdeve colocar os arquivos temporários, não que ele deva mudar de diretório em algum lugar. De man zip:

 -b path
      Use the specified path for the temporary  zip  archive.

Tente o seguinte:

cd /home/cyrus && zip sql.zip sql
Chris Down
fonte
Ou cd /home/cyrus && zip /sql.zip sqlse você deseja que o arquivo zip seja criado na raiz.
Tripleee 30/05
2

não sei se entendi direito, mas -b não mudará a pasta raiz. Ele colocará o arquivo zip temporário no diretório / home / cryus, copiando o sql.zip para o diretório atual quando terminar. Esta opção é útil apenas ao atualizar um arquivo existente, e o sistema de arquivos que contém esse arquivo antigo não possui espaço suficiente para armazenar os arquivos antigos e novos ao mesmo tempo.

tente usar:

-j Armazene apenas o nome de um arquivo salvo (junk the path) e não armazene nomes de diretório. Por padrão, o zip armazenará o caminho completo (relativo ao caminho atual).

Raza
fonte
1
-jpode não estar certo; Eu assumiria que o OP quer manter caminhos relativos, não remover todos os caminhos.
Tripleee 30/05
2

Inspirado pela resposta de Stephane:

(cd /home/cyrus; zip -r sql.zip sql;)

O resultado:

  1. você tem um sql.zip em / home / cyrus /
  2. sql.zip contém o diretório sql / e todo o seu conteúdo
  3. você PWD inicial não muda
Dmitrii Cretu
fonte
4
Como isso é melhor?
Stephen Rauch
0

Pode ser mais fácil desvincular a pasta que você está tentando compactar no diretório atual. Dessa forma, você pode ficar onde está.

ln -s /path/to/whatever .
zip -r myzip whatever

Eles possuem o link simbólico, se desejar.

jonr
fonte