J'ai cette ligne très simple dans un script bash qui s'exécute avec succès (c.-à-d. La production du _data.tar
fichier), sauf qu'elle n'exclut pas les sous-répertoires qu'il est dit d'exclure via l' --exclude
option:
/bin/tar -cf /home/_data.tar --exclude='/data/sub1/*' --exclude='/data/sub2/*' --exclude='/data/sub3/*' --exclude='/data/sub4/*' --exclude='/data/sub5/*' /data
Au lieu de cela, il produit un _data.tar
fichier contenant tout ce qui se trouve sous / data, y compris les fichiers des sous-répertoires que je voulais exclure.
Une idée pourquoi? et comment résoudre ce problème?
Mise à jour J'ai mis en œuvre mes observations sur la base du lien fourni dans la première réponse ci-dessous (répertoire de premier niveau en premier, pas d'espace après la dernière exclusion):
/bin/tar -cf /home/_data.tar /data --exclude='/data/sub1/*' --exclude='/data/sub2/*' --exclude='/data/sub3/*' --exclude='/data/sub4/*' --exclude='/data/sub5/*'
Mais ça n'a pas aidé. Tous les sous-répertoires "exclus" sont présents dans le _data.tar
fichier résultant .
C'est curieux. Qu'il s'agisse d'un bogue dans le tar actuel (GNU tar 1.23, sur CentOS 6.2, Linux 2.6.32) ou de "l'extrême sensibilité" du tar aux espaces et autres fautes de frappe faciles à oublier, je considère cela comme un bogue. Pour l'instant.
C'est horrible : j'ai essayé les idées suggérées ci-dessous (pas de fin /*
) et cela ne fonctionne toujours pas dans le script de production:
/bin/tar -cf /home/_data.tar /data --exclude='/data/sub1' --exclude='/data/sub2' --exclude='/data/sub3' --exclude='/data/sub4'
Je ne vois aucune différence entre ce que j'ai essayé et ce que @Richard Perrin a essayé, à l'exception des guillemets et de 2 espaces au lieu de 1. Je vais essayer (cela doit attendre que le script nocturne soit exécuté comme répertoire à sauvegarder) est énorme) et faire rapport.
/bin/tar -cf /home/_data.tar /data --exclude=/data/sub1 --exclude=/data/sub2 --exclude=/data/sub3 --exclude=/data/sub4
Je commence à penser que toutes ces tar --exclude
sensibilités ne sont pas du goudron, mais quelque chose dans mon environnement, mais alors qu'est-ce que cela pourrait être?
Ça a marché! La dernière variante essayée (pas de guillemets simples et d’espaces simples au lieu de doubles espaces entre les --exclude
s) a fonctionné. Bizarre mais acceptant.
Incroyable! Il s'avère qu'une ancienne version de tar
(1.15.1) exclut uniquement si le répertoire de niveau supérieur est le dernier sur la ligne de commande. C’est exactement le contraire de la version 1.23. FYI.