51 votes

Comment imprimer des fichiers qui auraient été modifiés avec rsync ?

Existe-t-il un moyen de faire en sorte que rsync imprime les chemins d'accès complets à tous les fichiers qui sont différents sans transférer de fichiers ?

Alternativement, j'ai besoin d'un moyen de différencier les fichiers entre deux arbres (via SSH) en se basant uniquement sur le changement de taille ou sur la date de dernière modification.

49voto

gal Points 113

Rsync dispose d'une fonction dry-run option :

-n, --dry-run               show what would have been transferred

Je ne sais pas si c'est ce que vous voulez.

Si vous voulez diff les fichiers sur deux arbres, vous pourriez peut-être faire une recherche récursive dans les deux directions avec find et pipe to output to ls et pipe both to a file. Vous pourriez alors utiliser diff pour comparer les fichiers.

18voto

kabZX Points 761

Je préfère utiliser le format --out pour voir les détails, le piping à moins :

rsync -azh --dry-run --delete-after --out-format="[%t]:%o:%f:Last Modified %M" source destination | less

13voto

Hugo Zaragoza Points 231

rsync -rvn localdir targetdir

L'option -n permet d'afficher uniquement les actions (sans qu'aucune action ne soit effectuée).

Notez que vous avez besoin du "v", sinon vous n'obtiendrez rien ! (les autres réponses l'oublient...)

4voto

Yvan Points 231

En s'appuyant sur d'autres réponses et https://serverfault.com/a/618740/114520

  • utiliser --dry-run (ou -n ) pour éviter toute modification
  • utiliser --itemize-changes (ou -i ) pour trouver les changements
  • utiliser --archive (ou -a ) pour obtenir tous les sous-répertoires
  • utiliser egrep pour filtrer les entrées commençant par un point (pas de changement)

Ce qui vous donne : rsync -nia source destination | egrep -v "sending incremental file list" | egrep -v "^\."

Si vous ne souhaitez qu'une seule voie, vous pouvez modifier la commande :

  • pour les changements entre la source et la destination : rsync -nia source destination | egrep -v "sending incremental file list" | egrep -v "^(\.|<)"
  • pour les changements entre la destination et la source : rsync -nia source destination | egrep -v "sending incremental file list" | egrep -v "^(\.|>)"

Et si vous n'avez besoin que des fichiers, il suffit d'ajouter awk magique : rsync -nia source destination | egrep -v "sending incremental file list" | egrep -v "^\." | awk '{print $2}'

2voto

NT. Points 109

La vérité, c'est que si vous dirigez rsync -v ... et qu'il affiche un nom de fichier à l'écran, ce fichier est en cours de transfert (ou qui aurait été transféré, si vous effectuez un --dry-run). Pour vérifier pourquoi rsync était sur le point de le transférer, utilisez le mode "itemize" : https://serverfault.com/a/618740/27813

Comme d'autres l'ont fait remarquer, par défaut, rsync se contente de comparer la taille du fichier et l'horodatage, qui doivent tous deux correspondre, sinon une "copie delta" est lancée sur ce fichier. Si vous voulez vraiment voir quels fichiers sont différents, utilisez le mode "-c" checksum.

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