Comprimi un file senza includere la directory principale


12

Ho una cartella che contiene più file

cartella

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

Il mio obiettivo è comprimere il file dall'esterno di questa cartella (quindi senza usare il cdcomando) senza includere la cartella dir.

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

Questo comando include la cartella dir nella zip finale. Qualche suggerimento?

Domanda correlata: comprimere il contenuto di una cartella senza includere la cartella stessa


1
Dalle pagine man, sembra che -jsi applicherebbe solo e ciò comprimerebbe tutte le cartelle in una singola directory a livello di root all'interno dello ZIP. Non è quello che stai cercando, vero?
phyrfox il

@phyrfox Forse sì. È necessario verificarlo. Grazie.
Lorenzo B,

Risposte:


13

Se si desidera archiviare tutti i file foldercon il loro nome senza un'indicazione di directory, è possibile utilizzare l' -jopzione.

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

o

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

Se hai file in sottodirectory, non avranno nemmeno alcun componente di directory nell'archivio, ad esempio folder/subdir/foosaranno archiviati nell'archivio come foo.

Ma sarebbe probabilmente più semplice passare alla directory. È quasi esattamente la stessa quantità di digitazione del metodo del controvento. Se lo fai, se includi i file nelle sottodirectory, avranno il loro percorso relativo dalla directory in cui sei cambiato, ad es. folder/subdir/fooSaranno memorizzati come subdir/foo.

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

Per uso interattivo, si perde il completamento della shell in questo modo, poiché la shell non si rende conto che ci si troverà in una directory diversa quando si esegue il zipcomando. Per rimediare, emettere il cdcomando separatamente. Per tornare facilmente alla directory precedente, è possibile utilizzare pushde popd.

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

Se si desidera il pieno controllo dei percorsi memorizzati in un file zip, è possibile creare una foresta di collegamenti simbolici. Salvo diversa indicazione, zipnon memorizza collegamenti simbolici.


Non devi elencare esplicitamente tutti i file nella sottodirectory ( folder), puoi semplicemente usare un jolly, cioèzip -j folder/*
Jakub Kukul

Affidarsi all'espansione della shell significa che i file dot (ad es. .profile) Non saranno inclusi nell'archivio. Invece, cambia la directory di lavoro corrente e specifica .come file da archiviare:cd folder && zip -r ../folder.zip .
sheldonh
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.