Terminal descompacte o diretório padrão externo

2

O uso do comando de terminal "unzip" parece ser extremamente útil ao implantar um CMS em um servidor remoto, já que você pode transferir um zip e descompactá-lo remotamente. No entanto, não consigo encontrar uma maneira de descompactar todos os arquivos diretamente na raiz do diretório em que o arquivo .zip reside. Por padrão, ele cria uma pasta com o mesmo nome que o arquivo .zip e extrai os arquivos para essa pasta. , depois do que eu preciso fazer um comando mv para mover o conteúdo da pasta para a raiz.

Posso de alguma forma fazer isso em uma única etapa usando o unzip?

    
por funkylaundry 30.09.2011 / 18:14

3 respostas

0

A resposta específica para a sua pergunta é não. O descompactador que vem com o OS X não tem como alterar diretórios no zip na hora. Uma coisa a notar, no entanto, é que o zip não está "criando o diretório". Faz parte do arquivo. Um arquivo zip criado corretamente não terá esse problema se você estiver controlando o processo de criação:

$ ls -l
total 0
-rw-r--r--  1 bsmith  staff  0 Sep 30 22:01 b
-rw-r--r--  1 bsmith  staff  0 Sep 30 22:01 c
$ zip -r a.zip .
  adding: b (stored 0%)
  adding: c (stored 0%)
$ cd ../b
$ unzip ../a/a.zip
Archive:  ../a/a.zip
 extracting: b                       
 extracting: c                       
$ ls -l
total 0
-rw-r--r--@ 1 bsmith  staff  0 Sep 30 22:01 b
-rw-r--r--@ 1 bsmith  staff  0 Sep 30 22:01 c
    
por 01.10.2011 / 07:07
2

Tente usar o parâmetro -d para especificar o diretório raiz para o qual extrair. Você pode usar '.' ou '~' como seu diretório e evite uma situação em que tudo é colocado em um diretório padrão contendo o nome do arquivo zip. Aqui está a documentação:

[-d exdir] An optional directory to which to extract files.
By default, all files and subdirectories are recreated in the current directory; the -d option allows extraction in an arbitrary directory (always assuming one has permission to write to the directory). This option need not appear at the end of the command line; it is also accepted before the zipfile specification (with the normal options), imme- diately after the zipfile specification, or between the file(s) and the -x option. The option and directory may be concatenated without any white space between them, but note that this may cause normal shell behavior to be sup- pressed. In particular, -d ~'' (tilde) is expanded by Unix C shells into the name of the user's home directory, but-d~'' is treated as a literal subdirectory ''~'' of the current directory.

    
por 30.09.2011 / 18:37
0

Você pode usar o sinalizador -j para o mesmo.

Exemplo:

$ mkdir Testing && cd Testing
~/Testing $ touch one two three four five
~/Testing $ cd ..
$ zip -r Testing Testing
$ ls -la | grep Testing


drwxr-xr-x   7 username  staff    238 Aug  2 20:03 Testing
-rw-r--r--   1 username  staff    924 Aug  2 20:03 Testing.zip

Agora,

$ rm -rf Testing
$ unzip -j Testing.zip
$ ls -la

-rw-r--r--   1 username  staff     0 Aug  2 20:03 five
-rw-r--r--   1 username  staff     0 Aug  2 20:03 four
-rw-r--r--   1 username  staff     0 Aug  2 20:03 one
-rw-r--r--   1 username  staff     0 Aug  2 20:03 three
-rw-r--r--   1 username  staff     0 Aug  2 20:03 two

Isso ajudará você a extrair o conteúdo do arquivo e não da pasta contida.

$ man unzip

-j     junk paths.  The archive's directory structure is not recreated;
       all files are deposited in the extraction directory 
       (by default, the current one).

Para mais informações, consulte as man pages para descompactar.

    
por 02.08.2015 / 16:45

Tags