1 votes

rsync copie les fichiers du répertoire de travail en plus de ceux demandés

Ce qui suit est un extrait de la sortie de bash -vx sur ma sauvegarde script

\+ rsync '' -avushi --stats --progress --log-file=/home/bigbird/temp/rlog/rlog1.txt /media/dataspace/data/webcasts/ /media/work/data/webcasts

envoi de la liste incrémentielle des fichiers

J'ai fait rsync s comme ça depuis toujours et je viens de voir ce problème en dernier mois ou deux. Celui-ci s'exécute sur Kubuntu Oneiric, mais je pense l'avoir vu sur Kubuntu Lucid également.

Le script est exécuté à partir de /home/bigbird/bin

Il fonctionne parfaitement sauf qu'il transfère en plus tous les fichiers de mon répertoire actuel vers la destination. J'ai également un deuxième rsync plus tard dans le script qui fait la même chose dans un autre répertoire.

Je viens de le relancer à partir d'un autre répertoire et il a copié tous ces fichiers à la place.

Je ne vois pas "." dans la source n'importe où, etc.

J'ai fait un set | less

J'ai regardé toutes mes ~/bin fichiers

J'ai regardé tous mes alias

Je n'ai pas la moindre idée de ce qui pourrait causer cela.

Où dois-je chercher le problème ?

1voto

Joe Points 1759

Le code original était

DRYRUN="-n"
DRYRUN=""
...

rsync "${DRYRUN}" -avushi --stats --progress --log-file="${LOGFILE}"
 /media/dataspace/data/webcasts/ "${MOUNT}${DESTDIR}"

Le code de travail est

DRYRUN=1      ## for testing rsync without any file transfers
DRYRUN=0    ## for live run
...
if (( ${DRYRUN} ))
then
  rsync -n -avushi --stats --progress --log-file="${LOGFILE2}" /media/dataspace"${DESTDIR2}"/ "${MOUNT}${DESTDIR2}"
else
  rsync    -avushi --stats --progress --log-file="${LOGFILE2}" /media/dataspace"${DESTDIR2}"/ "${MOUNT}${DESTDIR2}"
fi

"Nous avons rencontré l'ennemi, et c'est nous !" - Walt Kelly (bande dessinée Pogo)

Je l'ai trouvé ! Invisible ne veut pas dire qu'il n'est pas là.

Je ne comprends pas bien ce qui s'est passé, mais en mettant "${DRYRUN}" dans la ligne de commande rsync, le premier argument de rsync est devenu "". Apparemment, cela a été interprété comme PWD et non comme une erreur. Donc la commande a été transférée "" et ma vraie source vers ma vraie destination, car rsync accepte plusieurs sources. sources multiples.

La question restante est de savoir pourquoi rsync pense que "" signifie répertoire actuel au lieu de l'interpréter comme une erreur de syntaxe.

1voto

Votre cas est si simple que vous pourriez simplement supprimer les guillemets autour de la variable :

rsync $DRYRUN -avushi --stats --progress --log-file="${LOGFILE2}" /media/dataspace"${DESTDIR2}"/ "${MOUNT}${DESTDIR2}"

Mais vous pouvez avoir besoin des guillemets dans un autre cas, par exemple si le paramètre est un chemin contenant des espaces, qui peut ou non être défini. Voici donc une solution plus élégante :

linkdest="<OLD_BACKUP_PATH>"
rsync ${linkdest:+--linkdest="$linkdest"} -avushi --stats --progress --log-file="${LOGFILE2}" /media/dataspace"${DESTDIR2}"/ "${MOUNT}${DESTDIR2}"

Si $linkdest est vide, rien sera inséré. Si $linkdest n'est pas vide, --linkdest="$linkdest" sera inséré (et il sera évalué comme une commande et non comme une chaîne).

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