Compacta um arquivo sem incluir o diretório pai

3

Eu tenho uma pasta que contém vários arquivos

folder

  • artifact1.app
  • artifact2.ext2
  • artifact3.ext3
  • ...

Meu objetivo é zipar o arquivo de fora dessa pasta (sem usar o comando cd ) sem incluir o diretório da pasta.

zip -r ./folder/artifact.zip ./folder/artifact1.app

Este comando inclui o diretório dir no zip final. Alguma dica?

Pergunta relacionada: Zip the conteúdo de uma pasta sem incluir a própria pasta

    
por Lorenzo B 27.11.2015 / 11:53

1 resposta

4

Se você quiser armazenar todos os arquivos em folder sob seu nome sem uma indicação de diretório, você pode usar a opção -j .

zip -j folder/artifact.zip folder/artifact1.app folder/artifact2.ext2 folder/artifact3.ext3

ou

zip -j folder/{artifact.zip,artifact1.app,artifact2.ext2,artifact3.ext3}

Se você tiver arquivos em subdiretórios, eles não terão nenhum componente de diretório no arquivo morto, por exemplo, folder/subdir/foo será armazenado no arquivo como foo .

Mas provavelmente seria mais fácil mudar para o diretório. É quase exatamente a mesma quantidade de digitação que o método de chave. Se você fizer isso, se incluir arquivos em subdiretórios, eles terão seu caminho relativo do diretório em que você mudou, por exemplo, folder/subdir/foo será armazenado como subdir/foo .

(cd folder && zip artifact.zip artifact1.app artifact2.ext2 artifact3.ext3)

Para uso interativo, você perde a conclusão do shell dessa maneira, porque o shell não percebe que você estará em um diretório diferente quando executar o comando zip . Para remediar isso, emita o comando cd separadamente. Para voltar facilmente ao diretório anterior, você pode usar pushd e popd .

pushd folder
zip artifact.zip artifact1.app artifact2.ext2 artifact3.ext3
popd

Se você quiser controle total sobre os caminhos armazenados em um arquivo zip, poderá criar uma floresta de links simbólicos. A menos que seja instruído de outra forma, zip não armazena links simbólicos.

    
por 28.11.2015 / 01:06

Tags