Forum Linux.général rsync et exclude

Posté par  . Licence CC By‑SA.
Étiquettes : aucune
2
26
déc.
2021

Bonjour,

Je souhaite exclure des dossiers avec rsync mais cela ne marche pas. J'imagine que je dois faire mal quelques chose.

Je souhaite copier tout ce qui est sur la carte sd de mon téléphone qui se trouve ici sur :
/home/jared/mtp/Espace de stockage interne partagé/

pour le mettre dans :
/run/media/jared/WD_externe/A1_Android_backup

J'aimerais exclude le dossier Android qui est sur la racine de la carte SD mais il me le copie systematiquement. J'ai essayé de mettre la liste des dossiers dans un fichier puis faire un exclude-from mais le resultat est le même.

Qu'est que je fais de travers ?

rsync -avn --delete --protect-args --exclude Android "/home/jared/mtp/Espace de stockage interne partagé"/ /run/media/jared/WD_externe/A1_Android_backup
Merci.

  • # Entre côtes

    Posté par  . Évalué à 2.

    Il faut mettre des côtes autour d'Android

    rsync -avn --delete --protect-args --exclude 'Android' "/home/jared/mtp/Espace de stockage interne partagé"/ /run/media/jared/WD_externe/A1_Android_backup

    Plus d'infos ici
    https://linuxize.com/post/how-to-exclude-files-and-directories-with-rsync/

    Julien_c'est_bien (y'a pas que Seb)

    • [^] # Re: Entre côtes

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

      Les guillemets ne changent strictement rien dans ce cas, à moins d'avoir un shell très bizarre.

      En tout cas, chez moi ça marche (par contre markdown sur DLFP ça marche toujours pas bien) :

          $ tree from to
          from
          ├── a
          │   └── aa
          ├── b
          │   └── bb
          └── cc
          to
      
          2 directories, 3 files
          $ rsync -av --delete --protect-args --exclude a from/ to
          sending incremental file list
          ./
          cc
          b/
          b/bb
      
          sent 227 bytes  received 69 bytes  592.00 bytes/sec
          total size is 6  speedup is 0.02
          $ tree from to
          from
          ├── a
          │   └── aa
          ├── b
          │   └── bb
          └── cc
          to
          ├── b
          │   └── bb
          └── cc
      
          3 directories, 5 files
      

      Faudrait voir exactement le contenu des répertoires en question, la ligne de commande utilisée et le résultat.

      pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.

  • # Premier lancement incorrect, delete-excluded ?

    Posté par  . Évalué à 2.

    Salut,

    ta commande semble bonne. Je me demande, est-ce que par hasard, tu n'aurais pas d'abord lancé une copie sans le exclude, et ce que tu voies dans la destination est ce qui reste de cette première copie ? Le --delete ne va pas prendre en compte les fichiers exclus, sauf à dire --delete-excluded.

    Si tu fais --delete-excluded au lieu de --delete, est-ce que ça fonctionne mieux ?

    Dans mon exemple, on veut seulement avoir le fichier "coin" à l'arrivée.

    Copie des fichiers sans exclude et avec delete :

    /tmp$ tree src/
    src/
    └── Espace de stockage interne partagé
        ├── Android
        │   └── blah
        │       └── un_fichier
        └── coin
    
    3 directories, 2 files
    
    /tmp$ rsync -av --delete  "/tmp/src/Espace de stockage interne partagé"/ /tmp/dst
    sending incremental file list
    ./
    coin
    Android/
    Android/blah/
    Android/blah/un_fichier
    
    sent 292 bytes  received 73 bytes  730.00 bytes/sec
    total size is 12  speedup is 0.03
    

    Copie des fichiers avec exclude et delete, sans nettoyer entre temps, l'arbo Android reste :

    /tmp$ rsync -av --delete --exclude Android "/tmp/src/Espace de stockage interne partagé"/ /tmp/dst
    sending incremental file list
    
    sent 78 bytes  received 12 bytes  180.00 bytes/sec
    total size is 6  speedup is 0.07
    

    Enfin, copie avec exclude et delete-excluded, Android s'en va :

    /tmp$ rsync -av --delete-excluded --exclude Android "/tmp/src/Espace de stockage interne partagé"/ /tmp/dst
    sending incremental file list
    deleting Android/blah/un_fichier
    deleting Android/blah/
    deleting Android/
    
    sent 78 bytes  received 68 bytes  292.00 bytes/sec
    total size is 6  speedup is 0.04
    
    
  • # chez moi

    Posté par  . Évalué à 3.

    c'est --exclude='unmotif' --exclude='un autre motif'

    donc dans ton cas

    rsync -avn --delete --protect-args --exclude=Android "/home/jared/mtp/Espace de stockage interne partagé/*" /run/media/jared/WD_externe/A1_Android_backup/

  • # exclude trop large

    Posté par  . Évalué à 3.

    C'est indirectement lié à la question, mais le --exclude="Android" va aussi exclure les autres sous-répertoires ou fichiers nommés Android ailleurs dans l'arbo, pas seulement en haut. Il faut ancrer ton expression si tu veux n'exclure que le Android qui est dans la racine de ton dossier.

    • [^] # Re: exclude trop large

      Posté par  . Évalué à 3.

      Oui, c'est pareil quand on utilise l'option --filter, par exemple :

      #!/bin/sh
      
      src='/home/foo'
      dest='/run/media/foo/backup/home-foo'
      
      rsync --archive --delete --force --progress --stats \
              --filter '- /foo/.cache/'                   \
              "$src" "$dest"
      

      (version simplifiée d'un de mes scripts de backup).

      --filter '- foo/.cache/' ou
      --filter '- .cache/' n'ont pas le même effet.

Suivre le flux des commentaires

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