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

83

Eu tenho a seguinte estrutura de pastas:

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

Eu quero executar a ferramenta de linha de comando 7-zip para compactar todos os arquivos em folder1um 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 abro o arquivo zip, ele possui uma pasta chamada folder1e, dentro dele, tenho todos os arquivos que estavam dentro dessa pasta. Não quero que o nome da pasta seja adicionado à pasta zip, ou seja, eu gostaria de adicionar todos os arquivos em um formato de arquivo "Simples".

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

Existe um switch que fornece essa funcionalidade?

gg.
fonte
Você pode cdentrar na pasta1 e 7za.exe a -tzip ..\folder1.zip *.*?
zpletan

Respostas:

136

No arquivo da Ajuda do 7-Zip :

um comando (Adicionar)

Adiciona arquivos ao arquivo.

Exemplos

7z a archive1.zip subdir\

adiciona todos os arquivos e subpastas da pasta subdir para arquivar archive1.zip. Os nomes de arquivos no arquivo morto conterão subdir \ prefixo.

7z a archive2.zip .\subdir\*

adiciona todos os arquivos e subpastas da pasta subdir para arquivar archive2.zip. Os nomes de arquivos no arquivo morto não conterão subdir \ prefixo.

cd /D c:\dir1\

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

Os nomes de arquivos no arquivo c: \ archive3.zip conterão dir2 \ dir3 \ prefixo, mas não conterão c: \ dir1 \ prefixo.

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

Além disso, preste atenção ao manuseio de curingas do 7-Zip. Não é tratado *.*como "todos os arquivos" - significa "todos os arquivos com um ponto no nome do arquivo". Arquivos sem extensão serão perdidos. Se você realmente deseja todos os arquivos, basta usar *.

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

afrazier
fonte
2

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 pasta pai [ou seja, iniciará a partir de subpastas ...]

cd /D "C:\Parent"

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

Isso criará Parent.zip em C: \ Parent

Pritesh Dhokchaule
fonte
2
Isso duplica outra resposta e não adiciona novo conteúdo. Não poste uma resposta, a menos que você realmente tenha algo novo para contribuir.
DavidPostill
Bem, enquanto eu procurava por uma solução, não obtive exatamente essa solução. Obviamente, não vou apenas copiar e colar algumas respostas que encontrei online. Eu passo algum tempo nisso, então senti que deveria compartilhá-lo. De acordo com mim, você pode encontrar esta resposta exata aqui e no Stack Overflow publicado por mim.
Pritesh Dhokchaule
Observe que o 7-Zip não considera *.*"todos os arquivos", mas "todos os arquivos que possuem um ponto final como parte do nome do arquivo". Portanto, esta resposta realmente omitirá arquivos que não têm uma extensão (isso é observado na resposta aceita).
Bill_Stewart 25/02
1

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

No Linux, adicionar '*' não funcionou para mim, então acabei inventando uma linha de comando mais detalhada que dava o resultado desejado:

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

===========

explicação do script:

  • salve o caminho dir atual para usar mais tarde;
  • navegue para o diretório que precisa ser arquivado;
  • criar arquivo (aviso '.' (ponto) no final);
  • volte ao dir original;
  • livrar-se da variável que armazenou o caminho dir original

Espero que possa ser útil para alguém.

Humanier
fonte
Eu sugiro colocar as *aspas (caso contrário, o shell o expandirá para os arquivos deste local).
Simon Sobisch 13/06
-1

Que tal agora. por exemplo Pasta / subpasta1, Pasta / subpasta2

selecione todas as subpastas> clique com o botão direito e crie arquivo> selecione qualquer formato

* O nome do arquivo seria a pasta pai.

Simples né?

user708375
fonte
3
A questão é sobre a CLI para 7-zip, não como usar a GUI. Aprender a usar a GUI não faz sentido quando você deseja automatizar as coisas.
binki