Eu preciso criar um arquivo zip usando este comando:
zip /dir/to/file/newZip /data/to/zip/data.txt
Isso funciona, mas o arquivo zip criado cria uma estrutura de diretório que imita o diretório para o arquivo bruto. São muitas pastas extras que eu não preciso.
Não encontrei uma resposta rápida na página de manual ou em uma busca no Google.
Respostas:
Você pode usar
-j
.fonte
-j
não funciona para o seu diretório (juntamente com-r
) o checkout esta respostaO uso
-j
não funcionará junto com a-r
opçãoPortanto, a solução alternativa pode ser esta:
Ou versão in-line
você pode direcionar a saída
/dev/null
se não quiser que acd -
saída apareça na telafonte
cd path/to/parent/dir/ && zip -r ../../../../name.zip ./* && cd -
cd path/to/parent/dir/
você pode calcular o número de pontos duplos../
facilmente.Use a
-j
opção:fonte
Um pouco relacionado - eu estava procurando uma solução para fazer o mesmo para diretórios. Infelizmente, a
-j
opção não funciona para isso :(Aqui está uma boa solução sobre como fazê-lo: /superuser/119649/avoid-unwanted-path-in-zip-file
fonte
Como alternativa, você pode criar um link simbólico temporário para o seu arquivo:
Isso funciona também para um diretório.
fonte
Reter o diretório pai para
unzip
não vomitar arquivos em todos os lugaresAo compactar diretórios, manter o diretório pai no archive ajudará a evitar desarrumar o diretório atual quando você descompactar o arquivo morto posteriormente
Portanto, para evitar reter todos os caminhos, e como você não pode usar -j e -r juntos (você receberá um erro), faça isso:
A
../$(basename $PWD)
é a mágica que mantém o diretório pai.Então agora
unzip my.zip
vamos dar uma pasta contendo todos os seus arquivos:Em vez de desarrumar o diretório atual com os arquivos descompactados:
fonte
Basta usar a
-jrm
opção para remover as estruturas de arquivo e diretóriofonte