Criando um archive a partir de um diretório sem que o nome do diretório seja adicionado ao archive

70

Eu tenho a seguinte estrutura de pastas:

  • root
    • folder1
    • folder2
    • folder3
    • 7za.exe

Eu quero executar a ferramenta de linha de comando 7-zip para compactar todos os arquivos em folder1 para um arquivo zip chamado folder1.zip .

Executando o seguinte

7za.exe a -tzip folder1.zip folder1\*.*

produz um arquivo zip conforme o esperado. No entanto, quando eu abro o arquivo zip, ele tem uma pasta chamada folder1 e, por dentro, eu tenho todos os arquivos que estavam dentro dessa pasta. Eu não quero o nome da pasta adicionado à pasta zip, ou seja, gostaria de adicionar todos os arquivos em um formato de arquivo "Flat".

Eu também não quero recursivamente executar a ferramenta de linha de comando para cada arquivo / pasta individual.

Existe um switch que fornece essa funcionalidade?

    
por gg. 26.09.2011 / 18:51

4 respostas

114

No arquivo Ajuda do 7-Zip :

a (Add) command

Adds files to archive.

Examples

7z a archive1.zip subdir\

adds all files and subfolders from folder subdir to archive archive1.zip. The filenames in archive will contain subdir\ prefix.

7z a archive2.zip .\subdir\*

adds all files and subfolders from folder subdir to archive archive2.zip. The filenames in archive will not contain subdir\ prefix.

cd /D c:\dir1\

7z a c:\archive3.zip dir2\dir3\

The filenames in archive c:\archive3.zip will contain dir2\dir3\ prefix, but they will not contain c:\dir1\ prefix.

Assim, o comando que você deseja seria: 7za.exe a folder1.zip .\folder1\*

Além disso, preste atenção ao tratamento dos curingas pelo 7-Zip. Ele não trata *.* como "todos os arquivos" - significa "todos os arquivos com um período no nome do arquivo". Arquivos sem extensão serão perdidos. Se você realmente quiser todos os arquivos, use apenas * .

Por fim, o parâmetro -tzip não é necessário se o nome do arquivo morto terminar em .zip . O 7-Zip é inteligente o suficiente para descobrir qual formato você deseja nesses casos. É necessário apenas quando você deseja uma extensão personalizada (por exemplo, 7za.exe a -tzip foo.xpi <files> para um complemento do Mozilla).

    
por 26.09.2011 / 19:25
1

Isso funcionou para mim

Considere a estrutura de pastas como C: \ Parent \ SubFolders ..... E você deseja criar parent.zip que conterá todos os arquivos e pastas C: \ Parent sem a pasta pai [ou seja, ele será iniciado a partir de SubFolders ... ..]

cd /D "C:\Parent"

"7z.exe" a Parent.zip "*.*" -r

Isto irá criar o Parent.zip em C: \ Parent

    
por 07.06.2016 / 20:04
0

Apenas para expandir a resposta aceita (não consegui adicionar comentários):

No Linux, adicionando '*' não funcionou para mim, então acabei invocando uma linha de comando mais detalhada que deu o resultado desejado:

curr_dir=$(pwd); \ 
cd source_code/lambda/ ; \
7z a ../../lambda.zip .; \
cd $curr_dir \
unset curr_dir

===========

explicação do script:

  • salvar o caminho atual do diretório a ser usado posteriormente;
  • navegue até o diretório que precisa ser arquivado;
  • criar arquivo (aviso '.' (ponto) no final);
  • voltar ao diretório original;
  • livra-se da variável que armazenou o caminho original do diretório

Espero que possa ser útil para alguém.

    
por 17.07.2018 / 12:49
-1

Que tal isso. por exemplo. Pasta / subpasta1, pasta / subpasta2

select all subfolder > rightclick then create archive > select whatever format

* O nome do arquivo seria a pasta pai.

Simples, certo?

    
por 17.03.2017 / 06:23