Ne créez pas le fichier tar dans le répertoire que vous êtes en train d'emballer :
tar -czf /tmp/workspace.tar.gz .
fait l'affaire, sauf qu'il va extraire les fichiers dans tout le répertoire courant lorsque vous les décompressez. Mieux vaut faire :
cd ..
tar -czf workspace.tar.gz workspace
ou, si vous ne connaissez pas le nom du répertoire dans lequel vous vous trouviez :
base=$(basename $PWD)
cd ..
tar -czf $base.tar.gz $base
(Cela suppose que vous n'avez pas suivi de liens symboliques pour arriver là où vous êtes et que l'interpréteur de commandes n'essaie pas de vous deviner en revenant en arrière à travers un lien symbolique). bash
n'est pas digne de confiance à cet égard. Si vous devez vous en préoccuper, utilisez cd -P ..
pour effectuer un changement physique de répertoire. Il est stupide que ce ne soit pas le comportement par défaut à mon avis - déroutant, au moins, pour ceux pour qui les cd ..
n'a jamais eu d'autre sens).
Un commentaire dans la discussion dit :
Je [...] dois exclure le répertoire supérieur et je [...] dois placer le tar dans le répertoire de base.
La première partie du commentaire n'a pas beaucoup de sens - si le fichier tar contient le répertoire courant, il ne sera pas créé lorsque vous extrayez un fichier de cette archive car, par définition, le répertoire courant existe déjà (sauf dans des circonstances très étranges).
La deuxième partie du commentaire peut être traitée de deux manières :
- Soit : créer le fichier ailleurs -
/tmp
est l'un des emplacements possibles - et de le replacer à son emplacement d'origine une fois qu'il est terminé.
- Ou : si vous utilisez GNU Tar, utilisez l'option
--exclude=workspace.tar.gz
option. La chaîne de caractères qui suit l'option =
est un modèle - l'exemple est le modèle le plus simple - une correspondance exacte. Vous devrez peut-être spécifier --exclude=./workspace.tar.gz
si vous travaillez dans le répertoire courant, contrairement aux recommandations ; vous devrez peut-être spécifier --exclude=workspace/workspace.tar.gz
si vous montez d'un niveau comme cela est suggéré. Si vous avez plusieurs fichiers tar à exclure, utilisez ' *
', comme dans --exclude=./*.gz
.