Forum Programmation.shell Création .tar bash

Posté par  . Licence CC By‑SA.
Étiquettes : aucune
-1
9
nov.
2016

Bonjour à tous,

J'essaie depuis plusieurs jours de créer un .tar.gz avec des fichiers en paramètre pour faire un backup.
Cependant, au moment de la création de l'archive j'ai ce(s) message(s) d'erreur :

tar: chemin_repertoire_1: stat impossible: Aucun fichier ou dossier de ce type
tar: chemin_repertoire_2 : stat impossible: Aucun fichier ou dossier de ce type
tar: Arrêt avec code d'échec à cause des erreurs précédentes

Voici comment je construis l'archive :

tar zcvf $dirbackup/backup-$backupDate.tar.gz $chaine

où chaine vaut :

old_IFS=$IFS
IFS=$'\n'
chaine="";
for ligne in $(cat $1); do
    if [ $ligne != "$2" ]; then
        chaine="$chaine $ligne"
    fi
done
IFS=$old_IFS

où $1 est le fichier où je vais rechercher mes répertoires/fichiers à sauvegarder (1 répertoires par ligne)
et où $2 est le répertoire dans lequel ira le .tar.gz.

J'espère que vous pourrez m'aider …
Cordialement,

  • # J'ai envie de dire ...

    Posté par  (site web personnel) . Évalué à 4.

    … d'après le man

           -T, --files-from=FILE
                  get names to extract or create from FILE
    
    • [^] # Re: J'ai envie de dire ...

      Posté par  . Évalué à 1.

      L'erreur reste la même, j'ai utilisé :

      tar zcvf $dirbackup/backup-$backupDate.tar.gz --files-from $1
      
    • [^] # Re: J'ai envie de dire ...

      Posté par  . Évalué à 1.

      Quand je lance cette commande dans le shell ça fonctionne …

      tar zcvf /var/backups/mesbackups/test/backup-09-11‌​-2016-13-58.tar.gz ~/Documents/MIAGE/L3/semestre5/web ~/Documents/MIAGE/L3/semestre5/communication/
      

      Comment je peux faire avec mon script ? J'ai l'impression qu'il ne faut pas que les fichiers soient entre guillemets.

      • [^] # Re: J'ai envie de dire ...

        Posté par  . Évalué à 1.

        Tu utilises quel shell ? J’ai déjà eu le cas avec zsh,
        pour séparer les arguments, il demande la syntaxe $=variable

        Pour bash, je ne sais pas

        • [^] # Re: J'ai envie de dire ...

          Posté par  . Évalué à 1.

          J'utilise le shell bash.

          • [^] # Re: J'ai envie de dire ...

            Posté par  . Évalué à 0.

            As-tu essayé en utilisant les arrays ? Genre :

            old_IFS=$IFS
            IFS=$'\n'
            chaine=();
            for ligne in $(cat $1); do
                if [ $ligne != "$2" ]; then
                    chaine+=("$ligne")
                fi
            done
            IFS=$old_IFS

            Pour l’utilisation, ce serait :

            ${chaine[*]}

            Sous réserve, je suis peu familier du bash. A toi d’expérimenter ;)

  • # Solution

    Posté par  . Évalué à 1.

    Le problème était "simple".

    J'utilisais des chemins relatifs à place de chemins absolus.

    Merci à vous

Suivre le flux des commentaires

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