Exclusion du répertoire lors de la création d'un fichier .tar.gz

119

J'ai un /public_html/dossier, dans ce dossier il y a un /tmp/dossier qui contient environ 70 Go de fichiers dont je n'ai pas vraiment besoin.

J'essaye maintenant de créer un .tar.gzd' /public_html/exclusion/tmp/

Voici la commande que j'ai exécutée:

tar -pczf MyBackup.tar.gz /home/user/public_html/ --exclude "/home/user/public_html/tmp/" 

Le tar est toujours en cours de création, et en faisant un, ls -shje peux voir qu'il a MyBackup.tar.gzdéjà environ 30 Go, et je sais avec certitude que /public_html/sans /tmp/pas plus de 1 Go de fichiers.

Qu'ai-je fait de mal?

suresh
la source
l' -poption n'a aucune signification en termes de fonction de création, non !?
Martin Schneider

Réponses:

201

Essayez de supprimer le dernier / à la fin du chemin du répertoire à exclure

tar -pczf MyBackup.tar.gz /home/user/public_html/ --exclude "/home/user/public_html/tmp" 
Victor Parmar
la source
7
Pour exclure tout le dossier et son contenu: tar -pczvf MyBackup.tar.gz / home / user / public_html / --exclude "/ home / user / public_html / tmp / *"
Dr.jacky
Je reçois tar: Error exit delayed from previous errors.dans macos
prieragupd
Obtenir un tar d'erreur: Suppression du premier `/ 'des noms de membres
SenG
2
Ne fonctionne pas, j'ai dû utiliser à la --exclude="/home/user/public_html/tmpplace de--exclude "/home/user/public_html/tmp
Noir
1
Ne tenez pas compte de mon commentaire précédent que je ne peux plus modifier: excludedoit d'abord être spécifié en tant que notes stackoverflow.com/users/3904223/oussaka . Au moins c'est la seule chose qui a fonctionné pour moi
kghbln
46

Essayez de déplacer le --excludevers avant l'inclusion.

tar -pczf MyBackup.tar.gz --exclude "/home/user/public_html/tmp/" /home/user/public_html/ 
Martin Algesten
la source
Merci, cela a fonctionné pour moi sur une ancienne boîte Ubuntu 14.04 LTS.
Jamsi
1
J'avais besoin de le faire également sur OS X.
TheJacobTaylor
16

Oui, supprimez la fin /et (au moins dans ubuntu 11.04) tous les chemins indiqués doivent être relatifs ou complets. Vous ne pouvez pas mélanger des chemins absolus et relatifs dans la même commande.

sudo tar -czvf 2011.10.24.tar.gz ./start-directory --exclude "home/user/start-directory/logs"

n'exclura pas le répertoire des journaux mais

sudo tar -czvf 2011.10.24.tar.gz ./start-directory --exclude "./start-directory/logs"

marchera

utilisateur
la source
1
Travaillez pour moi lorsque je supprime le chemin absolu dans l'argument d'exclusion.
jruzafa
2
L'astuce sur le mélange de chemins absolus et relatifs était la clé pour moi ici
Dmitri DB
12

La commande correcte pour exclure le répertoire de la compression est:

tar --exclude='./folder' --exclude='./upload/folder2' -zcvf backup.tar.gz backup/

Assurez-vous de mettre --exclude avant les éléments source et destination .

et vous pouvez vérifier le contenu du fichier tar.gz sans décompresser:

tar -tf backup.tar.gz
oussaka
la source
3

Essaye ça

tar -pczvf advancedarts.tar.gz /home/user/public_html/ --exclude /home/user/public_html/tmp
Yogesh
la source
2

Vous pouvez également en exclure plusieurs en utilisant un seul --exclude. Comme cet exemple:

tar -pczf MyBackup.tar.gz --exclude={"/home/user/public_html/tmp","/home/user/public_html/data"} /home/user/public_html/

Dans --exclude=vous devez terminer le nom du répertoire sans /et doit être entre MyBackup.tar.gz et / home / user / public_html /

La syntaxe est:

tar <OPTIONS> <TARBALL_WILL_CREATE> <ARGS> <PATH_TO_COMPRESS>
LozanoMatheus
la source
2

La réponse acceptée n'a pas fonctionné pour moi, exécutant unxutils tar sur windows10. Au lieu de cela, j'ai dû mettre les fichiers / répertoires à archiver en tant que dernier paramètre, comme ceci:

tar -pczf MyBackup.tar.gz --exclude "/home/user/public_html/tmp/" /home/user/public_html/

Ensuite, cela a fonctionné.

user2081279
la source
2

Cela a fonctionné pour moi:

tar -zcvf target.tar.gz target/ --exclude="target/backups" --exclude="target/cache"
Noir
la source
2

tar -pczf <target_file.tar.gz> --exclude /path/to/exclude --exclude /another/path/to/exclude/* /path/to/include/ /another/path/to/include/*

Testé dans Ubuntu 19.10.

  1. L' =après excludeest facultatif. Vous pouvez utiliser à la =place de l'espace après le mot exclude- clé si vous le souhaitez.
  2. Le paramètre excludedoit être placé avant la source.
  3. La différence entre utiliser le nom du dossier (comme le 1er) ou le * (comme le 2ème) est la suivante: le 2ème inclura un dossier vide dans le package mais le 1er ne le fera pas.
scegg
la source
-2

L'option d'exclusion doit inclure le =signe et "n'est pas obligatoire.

--exclude=/home/user/public_html/tmp
Ivan Avery Frey
la source
1
"est requis si le dossier a de l'espace dans le nom
Noir