2 votes

Rsync include-from, exclude-from sans répertoire source

Je travaille sur un script de sauvegarde mais j'ai quelques problèmes avec mon script, pouvez-vous m'aider ?

INCLUDE="/data/scripts/include.txt"
EXCLUDE="/data/scripts/exclude.txt"
DST="/backupdir"

    rsync \
      --archive \
      --recursive \
      --include-from $INCLUDE \
      --exclude-from $EXCLUDE \
      --hard-links \
      --perms \
      --executability \
      --owner \
      --group \
      --human-readable \
      --verbose \
      --progress \
      --delete-before \
      --stats \
      --timeout=300 \
      -e "ssh -i $SSHKEY" $USER@$IP:$DST

#include
/root
/data
/etc/httpd
/data/lost+found

#exclude
/data/www/html/nextcloud/public_html/data/index.html
/data/www/html/nextcloud/public_html/data/nextcloud.log
/data/www/html/nextcloud/public_html/data/updater.log
/data/www/html/nextcloud/public_html/data/updater-*

Ma question est la suivante : comment indiquer à rsync de synchroniser tout ce qui se trouve dans le fichier d'inclusion, d'exclure tout ce qui se trouve dans le fichier d'exclusion sans lui donner de chemin source ?

1voto

edzzz Points 11

Le manuel dit que vous devez avoir un répertoire source.

Vous devriez utiliser la liste dans votre fichier d'inclusion comme une liste de répertoires source à parcourir et à synchroniser à partir de :

for dir in /root /data /etc/httpd
do
    rsync OPTIONS $dir DEST
done

Ou, vous pouvez faire de / votre répertoire source, et avoir quelque chose comme /* dans votre motif d'exclusion.

0voto

Paul Points 101

On pourrait penser que les fichiers répertoriés dans --include-from sont spécifiquement recherchés comme les arguments source, mais ce n'est pas ainsi que rsync fonctionne.

À la place, rsync recherche à partir du répertoire source spécifié et vers le bas uniquement si --recursive est spécifié. Au fur et à mesure que les fichiers sont trouvés, rsync les compare à --include-from. Si une correspondance est trouvée, le fichier est spécifiquement inclus et la recherche d'inclusions/exclusions s'arrête.

Un problème survient car l'ensemble de l'arborescence source a été inclus par l'option --recursive. Par conséquent, --exclude='*' doit exister APRÈS l'option --include-from pour supprimer les fichiers qui ne correspondent pas aux fichiers --include-from. De cette manière, l'ensemble de l'arborescence source sera analysé, mais seuls les fichiers --include-from seront inclus.

Un autre problème survient car l'arborescence source est recherchée de haut en bas. Tous les répertoires parent requis doivent également être spécifiés dans la liste --include-from ou ils seront supprimés par --exclude='*' et leurs enfants ne seront pas pris en compte.

La plupart des pages de manuel sont très minimalistes tandis que les pages d'info sont à l'opposé, mais lire les pages de manuel de rsync a été la meilleure chose que j'ai jamais faite. Rsync est très bien organisé.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X