106 votes

Comment tarir certains types de fichiers dans tous les sous-répertoires ?

Je veux goudronner tous les fichiers .php et .html d'un répertoire et de ses sous-répertoires. Si j'utilise

tar -cf my_archive *

ça déchire tous les fichiers, ce que je ne veux pas. Si j'utilise

tar -cf my_archive *.php *.html

il ignore les sous-répertoires. Comment puis-je faire en sorte que le tar soit récursif mais n'inclue que deux types de fichiers ?

176voto

DeeDee Points 529

find ./someDir -name "*.php" -o -name "*.html" | tar -cf my_archive -T -

24voto

Sairam Krish Points 493

Si vous utilisez bash version > 4.0, vous pouvez exploiter shopt -s globstar pour faire un travail rapide :

shopt -s globstar; tar -czvf deploy.tar.gz **/Alice*.yml **/Bob*.json

ceci ajoutera tous les fichiers .yml qui commencent par Alice dans n'importe quel sous-répertoire et ajoutera tous les fichiers .json qui commencent par Bob dans n'importe quel sous-répertoire.

19voto

Robin Sheat Points 376

C'est une méthode :

tar -cf my_archive.tar $( find -name "*.php" -or -name "*.html" )

Cette méthode présente toutefois quelques inconvénients :

  1. Il échouera s'il y a des fichiers ou des répertoires avec des espaces dans ceux-ci, et
  2. il échouera s'il y a tellement de fichiers que la longueur maximale de la ligne de commande est pleine.

Une solution de contournement pourrait être de sortir le contenu de la commande find dans un fichier, puis d'utiliser l'option "-T, --files-from FILE" pour tar.

4voto

Cela permettra de gérer les chemins contenant des espaces :

find ./ -type f -name "*.php" -o -name "*.html" -exec tar uvf myarchives.tar {} +

1voto

Noam Geffen Points 21

Mettez-les dans un dossier

find . \( -name "*.php" -o -name "*.html" \) -print > files.txt

Utilisez ensuite le fichier comme entrée de tar, utilisez -I ou -T selon la version de tar que vous utilisez.

Utiliser h pour copier les liens symboliques

tar cfh my.tar -I files.txt

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X