Alterar o diretório de trabalho

11

Estou tentando compactar um diretório em

/home/cyrus/sql

E eu queria mudar o diretório de trabalho quando compactar a pasta:

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

Mas quando eu verificar 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 deve ter sido sql . O que eu fiz de errado?

    
por Jürgen Paul 30.05.2013 / 06:22

6 respostas

10

De man zip :

-b path

 --temp-path path

Use the specified path for the temporary zip archive. For example:

zip -b /tmp stuff *

will put the temporary zip archive in the directory /tmp, copying over stuff.zip to the current directory when done. This option is useful when updating an existing archive and the file system containing this old archive does not have enough space to hold both old and new archives at the same time. It may also be useful when streaming in some cases to avoid the need for data descriptors. Note that using this option may require zip take additional time to copy the archive file when done to the destination file system.

Por padrão, zip armazena o caminho completo relativo ao diretório atual. Se você quiser que seu zipfile tenha seu diretório sql como a raiz, você precisará executar o comando no diretório /home/cyrus .

    
por 30.05.2013 / 06:58
9

Se você quiser zip do conteúdo de um determinado diretório e armazenar o arquivo zip no diretório atual, poderá escrevê-lo:

(cd /some/dir && zip -r - dir-there) > file.zip
    
por 30.05.2013 / 08:08
5

-b especifica onde zip deve colocar arquivos temporários, não que deva alterar o diretório em algum lugar. De man zip :

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

Tente isto:

cd /home/cyrus && zip sql.zip sql
    
por 30.05.2013 / 06:54
2

não tenho certeza se entendi bem, mas -b não alterará a pasta raiz. Ele colocará o arquivo zip temporário no diretório / home / cryus, copiando o arquivo sql.zip para o diretório atual quando terminar. Essa 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 arquivos antigos e novos ao mesmo tempo.

tente usar:

-j Armazena apenas o nome de um arquivo salvo (lixo o caminho), e não armazena               nomes de diretórios. Por padrão, o zip armazena o caminho completo (relativo               para o caminho atual).

    
por 30.05.2013 / 06:55
1

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. seu PWD inicial não muda
por 11.07.2017 / 14:54
0

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

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

Eles rm o symlink se você desejar.

    
por 27.01.2018 / 00:09

Tags