J'ai un dossier contenant plusieurs fichiers
dossier
- artifact1.app
- artifact2.ext2
- artifact3.ext3
- ...
Mon objectif est de compresser le fichier depuis l'extérieur de ce dossier (donc sans utiliser de cd
commande) sans inclure le répertoire du dossier.
zip -r ./folder/artifact.zip ./folder/artifact1.app
Cette commande inclut le répertoire du dossier dans le zip final. Des indices?
Question connexe: compresser le contenu d'un dossier sans inclure le dossier lui-même
-j
s'appliquerait, ce qui compresserait tous les dossiers dans un seul répertoire racine au sein du ZIP. Ce n'est pas ce que vous cherchez, n'est-ce pas?Réponses:
Si vous souhaitez stocker tous les fichiers
folder
sous leur nom sans indication de répertoire, vous pouvez utiliser l'-j
option.ou
Si vous avez des fichiers dans des sous-répertoires, ils n'auront pas non plus de composant de répertoire dans l'archive, par exemple
folder/subdir/foo
seront stockés dans l'archive sousfoo
.Mais il serait probablement plus facile de passer au répertoire. C'est presque exactement la même quantité de frappe que la méthode d'accolade aboe. Si vous faites cela, si vous incluez des fichiers dans des sous-répertoires, ils auront leur chemin relatif depuis le répertoire dans lequel vous avez changé, par exemple
folder/subdir/foo
seront stockés soussubdir/foo
.Pour une utilisation interactive, vous perdez l'achèvement du shell de cette façon, car le shell ne se rend pas compte que vous serez dans un répertoire différent lorsque vous exécuterez la
zip
commande. Pour y remédier, exécutez lacd
commande séparément. Pour revenir facilement au répertoire précédent, vous pouvez utiliserpushd
etpopd
.Si vous voulez un contrôle total sur les chemins stockés dans un fichier zip, vous pouvez créer une forêt de liens symboliques. Sauf indication contraire,
zip
ne stocke pas de liens symboliques.la source
folder
), vous pouvez simplement utiliser un caractère générique, c'estzip -j folder/*
.profile
) ne seront pas inclus dans l'archive. Au lieu de cela, changez le répertoire de travail actuel et spécifiez.
comme fichier à archiver:cd folder && zip -r ../folder.zip .