web-dev-qa-db-fra.com

Comment utiliser tar pour exclure tous les fichiers d'un certain répertoire?

Un client télécharge des fichiers sur un serveur de développement. Lorsque le moment est venu de télécharger le projet sur un serveur de production, ces fichiers ne sont plus nécessaires et nous souhaitons les exclure du fichier tar qui sera éventuellement passé à la production. Cependant, nous souhaitons toujours garder le répertoire intact, ce ne sont que les fichiers inutiles

En utilisant Ubuntu 16 et tar 1.28, nous avons essayé:

tar -vczf archive.tar.gz . --exclude=wp-content/uploads/wpallimport/files/*
tar: Cowardly refusing to create an empty archive

Nous avons également essayé de placer un paramètre exclude = entre des citations simples et doubles, sans succès.

tar -vczf archive.tar.gz . --exclude='wp-content/uploads/wpallimport/files/*'
tar: Cowardly refusing to create an empty archive

Le site officiel montre --exclude sans signe égal

tar -vczf file.tar.gz --exclude 'directory/*' . et donne la même erreur.

Comment est-ce fait?

6
user658182

Le type habituel avec l'option --exclude de tarname __ est qu'il est par rapport à l'argument de répertoire p. Ex. donné

$ tree dir
dir
└── subdir
    └── subsubdir
        ├── file1
        ├── file2
        └── file3

2 directories, 3 files

puis

$ tar cvf dir.tar.gz --exclude='/dir/subdir/subsubdir/*' dir
dir/
dir/subdir/
dir/subdir/subsubdir/
dir/subdir/subsubdir/file1
dir/subdir/subsubdir/file2
dir/subdir/subsubdir/file3

ne parvient pas à exclure le contenu de subsubdir(il tente d'exclure dir/dir/subdir/subsubdir/*, ce qui ne correspond à rien); ce que tu veux c'est

$ tar cvf dir.tar.gz --exclude='subdir/subsubdir/*' dir
dir/
dir/subdir/
dir/subdir/subsubdir/

Autant que je sache, l'ordre n'a pas d'importance, sauf que le fichier de sortie doit immédiatement suivre l'option fname__.

9
steeldriver

Disons que vous avez un répertoire nommé "top-dir" avec les sous-dossiers "dir/subdir". Si vous souhaitez exclure le contenu d'un répertoire "dir/subdir" mais pas le répertoire lui-même, la ligne de commande qui fonctionne réellement est tar -zcp --exclude='dir/subdir/*' -f archive.tgz top-dir.

Vous devez utiliser le commutateur -f après le --exclude et avant le nom du fichier d’archive.

2
Jacques