Forum Linux.débutant [RÉSOLU] rsync exclusion de fichier et dossier

Posté par  . Licence CC By‑SA.
Étiquettes :
1
23
jan.
2017

Je viens de tester plusieurs pattern et je n'arrive toujours pas a exclure un dossier (plupload) et deux fichiers (index.htm et plupload/index.htm) avec rsync. (c'est surtout les deux fichiers html que je voudrais exclure)
Merci d'avance pour votre aide si précieuse.

Voici la commande rsync actuelle :

su $userPourCopie -c "rsync $dossierSource $montageLocal$dossierDistant/latest/ -r --delete --exclude $dossierSourceplupload/ --exclude $dossierSourceindex.htm*"

J'ai testé avec des ** (qui signifie "tout y compris slash") comme indiqué dans le man mais rien ne semble changer :'(

voici le script complet utilisé pour sauvegarder les fichiers joints de phpBB

#!/bin/bash
# Licence WTFPL - infos : https://www.0rion.netlib.re/forum4/viewtopic.php?f=71&t=496#p1081
# synchronisation des fichiers joints d'un ou plusieurs forum phpBB sur le cloud
# V 1.4 - lancer le software sans paramètre = backup dans dossierDistant/latest et dossierDistant/daily si non ajoutez un des paramètres cron suivant : hourly, daily, weekly, monthly, yearly (dans tout les cas le dossier latest sera update)

montageLocal="/media/cloudServerName" #le point de montage locale
dossierDistant="/phpBB_fichiers_joints" #le dossier destination ne terminez pas par /
dossierSource="/var/www/html/forum4/files/" #le dossier source
userPourCopie="root" #l'utilisateur a utiliser pour la copie
identifiantFichier="saveFichierJointPhpBB_" # remplissez si vous souhaitez placer un mot pour identifier les fichiers compressé

if [ ! "$SUDO_USER" ]; then
echo "this script need to be lunch by root"
exit 0
fi

   #VERIFICATION DU MONTAGE
startTime=`date +%s`
if [ -d "$montageLocal$dossierDistant" ];then
   endTime=`date +%s`
   runTime=$((endTime-startTime))
   if [ "$runTime" -lt "600" ];then

   #ACTION


            dossierTemps="/daily/"

            case "$1" in
            "hourly")
                dossierTemps="/hourly/"
                ;;
            "daily")
                dossierTemps="/daily/"
                ;;
            "weekly")
                dossierTemps="/weekly/"
                ;;
            "monthly")
                dossierTemps="/monthly/"
                ;;
            "yearly")
                dossierTemps="/yearly/"
                ;;
            esac

                # VERIF IF DESTINATION FOLDER EXIST IF NOT CREAT IT
            if ! [ -d "$montageLocal$dossierDistant$dossierTemps" ];then
                    mkdir -p "$montageLocal$dossierDistant$dossierTemps"
            fi
            if ! [ -d "$montageLocal$dossierDistantlatest" ];then
                    mkdir -p "$montageLocal$dossierDistant$dossierDistantlatest"
            fi

            sudo chown www-data:$userPourCopie -R $dossierSource & sudo chmod 770 -R $dossierSource
              #sauvegarde des fichiers locaux vers cloud
#echo "copie dans $montageLocal$dossierDistant$dossierTemps"
      dateBackup=$(date +%Y-%m-%d)
      heureBackup=$(date +%Hh%Mm)
      jourBackup=$(date +%A)
#echo "$montageLocal$dossierDistant$dossierTemps$identifiantFichier$dateBackup.$heureBackup.$jourBackup.tar.gz"
      tar -cvzf "$montageLocal$dossierDistant$dossierTemps$identifiantFichier$dateBackup.$dateBackup.$heureBackup.$jourBackup.tar.gz" $dossierSource*


#echo "copie dans $montageLocal$dossierDistant/latest"
            su $userPourCopie -c "rsync $dossierSource $montageLocal$dossierDistant/latest/ -r --delete --exclude $dossierSourceplupload/ --exclude $dossierSourceindex.htm*"
              #on reverrouille l'accès au dossier
            sudo chown www-data:root -R $dossierSource & sudo chmod 770 -R $dossierSource
   else
   echo "$montageLocal => not responding (408) / delais d'attente depasse"
   fi
else
echo "$montageLocal$dossierDistant => not exist"
fi
  • # Espace

    Posté par  . Évalué à 2.

    L'argument --exclude part du répertoire courant où est lancé la commande rsync et le pattern est séparé par un espace :

    Prenons le cas du dossier /home où se situe les fichiers toto.html et toto.tar, on ne veut pas de toto.html

    • rsync -aPL --exclude toto.html /lieu/de/destination

    Or je vois que dans ta commande tu colle le pattern à ta variable : $dossierSourceplupload/.

    As tu essayé avec l'espace ? --> $dossierSource plupload/

    • [^] # Re: Espace

      Posté par  . Évalué à 0. Dernière modification le 23 janvier 2017 à 16:16.

      Merci pour ton aide.

      Je viens de tester avec un espace et avec/sans l'option que tu as indiqué (-aPL, qui n'est pas décrite dans le man d'ailleurs) mais ça ne fonctionne pas :

      rsync: change_dir "/home/pi//plupload" failed: No such file or directory (2)
      

      Donation Bitcoin : 1N8QGrhJGWdZNQNSspm3rSGjtXaXv9Ngat

      • [^] # Re: Espace

        Posté par  . Évalué à 3.

        Plutôt que des espaces, je pense qu'il faut mettre des accolades autour des noms de variables collées à des chaînes de caractères :

        ${dossierSource}pupload
        

        pour que le shell sache où commence et où finit le nom de la variable.

  • # slash

    Posté par  . Évalué à -10.

    dossierSource="/var/www/html/forum4/files" #le dossier source sans le slash

    $userPourCopie -c "rsync $dossierSource/ $montageLocal$dossierDistant/latest/ -r --delete --exclude $dossierSource/plupload/ --exclude $dossierSource/index.htm*"

    en ajoutant les slashs dans la commande

    • [^] # Re: slash

      Posté par  . Évalué à 0.

      Cela ne semble hélas rien changer :(

      Donation Bitcoin : 1N8QGrhJGWdZNQNSspm3rSGjtXaXv9Ngat

  • # Syntaxe

    Posté par  . Évalué à 2.

    Bonjour,

    Si je regarde les exemples du man il faut utiliser --exclude=PATTERN et pas --exclude PATTERN

    Pour éviter de désagréables suprises, il serait aussi préférable d'utiliser ${dossierSource}plupload
    au lieu de $dossierSourceplupload, mais bon c'est pas plus moi qui code :)

    • [^] # Re: Syntaxe

      Posté par  . Évalué à 1.

      Je viens d'essayer avec

      su $userPourCopie -c "rsync $dossierSource $montageLocal$dossierDistant/latest/ -r --delete --exclude ${dossierSource}plupload/ --exclude ${dossierSource}index.htm*"
      

      et

      su $userPourCopie -c "rsync $dossierSource $montageLocal$dossierDistant/latest/ -r --delete --exclude=${dossierSource}plupload/ --exclude=${dossierSource}index.htm*"
      

      Mais autant les fichiers index.htm que le dossier plupload sont toujours ajouté dans le backup

      Pour éviter de désagréables suprises, il serait aussi préférable d'utiliser ${dossierSource}plupload

      Merci pour l'astuce, je trouvais vraiment désagréable la méthode de concaténation que j'utilisais (j'ai enfin pu mettre des _ en lieu et place des . )

      Donation Bitcoin : 1N8QGrhJGWdZNQNSspm3rSGjtXaXv9Ngat

      • [^] # Re: Syntaxe

        Posté par  . Évalué à -10.

        pour exclure le dossier plupload de la synchro
        il me semble qu'il ne faut pas ajouter le slash après

        • [^] # Re: Syntaxe

          Posté par  . Évalué à 0. Dernière modification le 23 janvier 2017 à 18:35.

          Le man semble indiquer que pour un dossier il faut ajouter le slash. (j'arrive plus a retrouver où il dit ça, ce man est trop long ^ ^ )
          Je viens de tester avec et sans slash le dossier est backup.

          Donation Bitcoin : 1N8QGrhJGWdZNQNSspm3rSGjtXaXv9Ngat

      • [^] # Re: Syntaxe

        Posté par  . Évalué à 3.

        toujours dans la syntaxe, plutot que ta syntaxe etrange avec les options APRES SRC et DST :

        rsync $dossierSource $montageLocal$dossierDistant/latest/ -r --delete --exclude=${dossierSource}plupload/ --exclude=${dossierSource}index.htm*

        je ferais plutot en respectant le format preconisé par le manuel
        rsync [OPTION...] SRC... [DEST]

        ce qui donne

        rsync -r --delete --exclude=plupload* --exclude=index.htm* ${dossierSource} ${montageLocal}${dossierDistant}/latest/
        • [^] # Re: Syntaxe

          Posté par  (site web personnel) . Évalué à 2. Dernière modification le 23 janvier 2017 à 19:14.

          On peut mettre les options après SRC et DEST sans problèmes. C'est surtout que l'argument de --exclude est relatif par rapport à SRC, donc il ne faut pas mettre $(dossierSource) dans le PATTERN, et ce qui est indiqué ci-dessus devrait fonctionner…

          Pour nous émanciper des géants du numérique : Zelbinium !

          • [^] # Re: Syntaxe

            Posté par  . Évalué à 1.

            Ça fonctionne ! Thank you well!

            Donation Bitcoin : 1N8QGrhJGWdZNQNSspm3rSGjtXaXv9Ngat

Suivre le flux des commentaires

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