Forum Programmation.shell ksh : exclusion d'une série de fichier dans un tar : prb d'expension

Posté par  . Licence CC By‑SA.
Étiquettes :
0
21
avr.
2015

Je bute sur un truc qui me gave depuis plusieurs heures : j'ai un script qui crée une archive d'où je veux exclure certains fichiers.
En gros, ca fait :

    #!/bin/ksh
    export TAR_EXCLUDE="--exclude '*var/cache/*'"
    tar $TAR_EXCLUDE -pvczf ~/tmp/archive.tgz appli/

et mon repertoire appli est constitué de :
appli/
appli/bidule/fichier.txt
appli/truc/a/mettre/dans/le/TGZ
appli/non/var/cache/pas/ce/truc/dans/le/tgz
appli/non/plus/var/cache/pas/dans/le/tgz
appli/et/ca/dedans.txt

Je veux exclure "var/cache" (et tout ce qu'il contient) de mon archive, sachant que cette structure n'est pas forcément à la racine de appli.

J'ai tourné un peu dans tout les sens les double-quote ou simple quote, et impossible de faire fonctionner le script.
Ca fonctionne correctement quand j'execute directment la commande dans le shell, mais j'ai besoin de lancer cela dans un script (interpréteur ksh imposé).

Une idée ?

  • # pistes dans le man

    Posté par  . Évalué à 3.

    le MAN propose les options suivantes :

    --wildcards
    use wildcards with --exclude

    --wildcards-match-slash
    wildcards match slashes (/) with --exclude

    sinon tu peux jouer de la ligne de commande pour generer les dossiers/fichiers à exclure (avec un find qui sortirait la liste dans un fichier)

    pour ensuite donner ce fichier à tar avec l'option

    -X, --exclude-from FILE
    exclude files listed in FILE

    • [^] # Re: pistes dans le man

      Posté par  . Évalué à 1.

      J'ai finalement trouvé la solution :

      #!/bin/ksh
      export TAR_EXCLUDE="--exclude=var/cache"
      tar czvf archive.tgz appli/ --wildcards $TAR_EXCLUDE
      
      • mettre "=" dans le "exclude"
      • retirer les *
      • forcer le --wildcards
      • et le tout, dans le bon ordre

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.