Existe-t-il une commande shell simple/script qui permet d'exclure certains fichiers/dossiers de l'archivage ?
J'ai un répertoire qui doit être archivé avec un sous-répertoire qui contient un certain nombre de très gros fichiers que je n'ai pas besoin de sauvegarder.
Pas tout à fait des solutions :
Le site tar --exclude=PATTERN
correspond au modèle donné et exclut ces fichiers, mais j'ai besoin que des fichiers et dossiers spécifiques soient ignorés (chemin d'accès complet), sinon des fichiers valides pourraient être exclus.
Je pourrais aussi utiliser la commande find pour créer une liste de fichiers et exclure ceux que je ne veux pas archiver et passer la liste à tar, mais cela ne fonctionne que pour une petite quantité de fichiers. J'en ai des dizaines de milliers.
Je commence à penser que la seule solution est de créer un fichier avec une liste de fichiers/dossiers à exclure, puis d'utiliser rsync avec --exclude-from=file
pour copier tous les fichiers dans un répertoire tmp, et ensuite utiliser tar pour archiver ce répertoire.
Quelqu'un peut-il penser à une solution meilleure/plus efficace ?
EDIT : Charles Ma La solution de l'auteur fonctionne bien. Le gros problème est que le --exclude='./folder'
MUST être au début de la commande tar. Commande complète (cd en premier, pour que la sauvegarde soit relative à ce répertoire) :
cd /folder_to_backup
tar --exclude='./folder' --exclude='./upload/folder2' -zcvf /backup/filename.tgz .
178 votes
Une autre chose m'a surpris, ça vaut peut-être la peine d'être noté : Barre oblique de fin à la fin des dossiers exclus fera en sorte que tar pas exclure ces dossiers du tout.
7 votes
Merci @Rekhyt, j'ai fixé la commande pendant 15 minutes ... puis 30.
12 votes
Il semble que la position de --exclude dépende de la version de tar. Pour tar 1.23, --exclude doit venir après les commandes principales.
3 votes
N'oubliez pas les "'" (guillemets).
2 votes
J'ai dû enlever les guillemets simples afin d'exclure avec succès les répertoires. (
tar -zcvf gatling-charts-highcharts-1.4.6.tar.gz /opt/gatling-charts-highcharts-1.4.6 --exclude=results --exclude=target
)0 votes
Cela n'a fonctionné que sans les guillemets pour moi aussi.
1 votes
Le site
--exclude='./folder'
La syntaxe ne semble pas fonctionner sur OS X.1 votes
Cela fonctionne avec des citations, j'utilise celle-ci
tar --exclude "logs" --exclude "*.tar.gz" -zcvf "Archive.tar.gz" -C "/path/to/files" .
Le site--exclude
doit passer en premier, j'avais des problèmes jusqu'à ce que je fasse ça. Ici j'utilise l'option -C ; changer de répertoire. Cela aide à le rendre insensible au répertoire initial à partir duquel TAR est exécuté.7 votes
--exclude
n'a pas besoin d'être le premier mais il doit se trouver quelque part avant le répertoire source (testé avec tar 1.29 sur Cygwin).