rsync - signaler uniquement les fichiers téléchargés

14

J'ai un problème avec rsync: soit il me montre tous les fichiers dans les répertoires que je rsyncule (si j'utilise le drapeau -v) ou rien du tout (quand je n'utilise pas -v).

Je voudrais que rsync soit silencieux, sauf pour les fichiers qui ont dû être téléchargés à l'extrémité. Existe-t-il un indicateur pour activer ce type de rapport? Je ne trouve pas cela dans la documentation

dangonfast
la source

Réponses:

11

Oui, regardez le -idrapeau. Il donne un rapport de chaque opération dans un format cryptique. Voir la page de manuel pour la définition exacte du format.

Afin d'obtenir la liste des fichiers envoyés à l'hôte distant, vous pouvez utiliser les éléments suivants:

rsync <options> -i <src> <dst> | grep '^<' | awk '{ print $2 }'
Oliver
la source
1
Cela signale à nouveau tous les fichiers, pas ceux modifiés.
dangonfast
@gonvaled Non, seuls les fichiers qui sont envoyés à l'hôte distant sont sortis (comme <fcstpoguax filename, où les différents drapeaux indiquent pourquoi ils doivent être mis à jour). S'il signale tous les fichiers, il y a peut-être un problème avec votre test ou votre environnement.
Oliver
Je pense que tu as raison. J'ai jeté un œil à la page de manuel et elle est décrite comme vous le dites. Mais mon système signale tous les fichiers. Peut-être que quelque chose ne va pas avec l'extrémité
distante
Mmmm. se rapprocher: la chaîne de rapport est (pour tous les fichiers) <f..T....... Selon la page de manuel, cela est lié aux horodatages.
dangonfast
1
l'utilisation grep -E '^[^.]|^$'laisserait également passer les lignes statistiques (ou avertissements, erreurs, ...), ne supprimant que les lignes vraiment ennuyeuses commençant par un point ...
Frank Nocke
9

rsync avec un seul -vimprime en fait uniquement les fichiers transférés. Si vous obtenez la liste complète à chaque fois, cela signifie probablement que l'algorithme de comparaison rsync src / dest par défaut, qui est basé sur le temps de modification + la taille, ne convient pas à votre cas. Vous pouvez ajouter l' indicateur -c( --checksum) qui permet à rsync de comparer les fichiers par somme de contrôle. Notez que cela entraîne évidemment une surcharge d'E / S.

Le fait que si vous utilisez --info=flistau lieu de -valors vous obtenez une sortie plus équilibrée des fichiers (vous sautez essentiellement l'en-tête et le pied de page de la -vsortie typique ) est légèrement lié .

Amr Mostafa
la source
1
--info=flistest uniquement disponible dans rsync> = 3.1, qui n'est pas disponible partout. Par exemple, macOS est livré avec une ancienne version 2.6.9 car Rsync v3 n'est pas sous GPL 3.
chiborg
1
Bien que cette rumeur Apple GPL soit super-juteuse, rappelez-vous également qu'Enterprise Linux a une gamme de support massive (14 ans) où les versions sont verrouillées (et branchées) pour préserver la certification et garantir la compatibilité (api + abi) pendant la durée de vie prise en charge de la version . C'est en fait la seule façon possible de le faire, et l'effet secondaire est que les numéros de version semblent anciens et que les nouvelles fonctionnalités ne frappent pas l'Enterprise pendant ce qui peut sembler être longtemps.
user2066657
2

une chose qui me vient à l'esprit est d'utiliser un format de journal plus détaillé et de dire ce que vous voulez obtenir.

par exemple:

rsync -a --out-format="%b  %i %f" /etc/ /tmp/qq/ |awk '{if ($1>0) {print $3}}'

ce n'est pas très robuste, il ne gérera pas bien les noms de fichiers avec des espaces.

pQd
la source
1

1. Utilisez l' -ioption

Pour ces drapeaux de changement iconisés (ou: cryptiques). Votre sortie ressemblera à ceci:

*deleting   DSC00012 (copy).JPG
.d..tp..... ./
.f...p..... DSC00011.JPG
>f+++++++++ DSC00012 (copy2).JPG
>f.stp..... DSC00012.JPG
.f...p..... DSC00014.JPG

Number of files: 5 (reg: 4, dir: 1)
Number of created files: 1 (reg: 1)
... more statistic stuff
sent 636.01K bytes  received 4.63K bytes  1.28M bytes/sec
total size is 2.84M  speedup is 4.44

2. grep chaque ligne commençant par un point.

Laissez passer toutes les autres lignes (également vides, pour plus de lisibilité):

rsync -arz -i --stats -h ... /mnt/FooDrive/ /mnt/backup  | grep -E '^[^.]|^$'

Et nous y voilà :-) - Exactement ce que le médecin a ordonné:

*deleting   DSC00012 (copy2).JPG
>f.stp..... DSC00011.JPG
>f+++++++++ DSC00012 (copy).JPG

Number of files: 5 (reg: 4, dir: 1)
Number of created files: 1 (reg: 1)
...

Éviter les points plutôt que de chasser > a également l'avantage de laisser passer les statistiques, mais aussi les erreurs potentielles, les avertissements, etc.

Avoir des statistiques à la fin est une préférence personnelle. Ne l'utilisez pas -h --statssi vous ne les aimez pas. Je suppose que votre principal intérêt est de ne pas voir défiler des centaines ou des milliers de fichiers inchangés ...

Frank Nocke
la source
0

Je ne pense pas qu'il y ait un drapeau pour le faire, mais il pourrait y en avoir maintenant. Voici comment je l'ai fait:

rsync -vv [other options] | grep -v 'uptodate'
Mike
la source
1
Mon rsync (version 3.0.7) n'ajoute rien uptodateau rapport, donc pas possible de filtrer cela.
dangonfast
Je veux corriger, ou au moins clarifier, ce que Mike a posté ci-dessus et ce que @ jeckyll2hide a souligné. Je pense que le problème n'est pas que rsync -v n'émet plus la chaîne "uptodate" mais plutôt que vous devez utiliser rsync -vv. Notez les deux vs je viens de vérifier que cela fonctionne sur Ubuntu 14.04 avec la version 3.1.0 de rsync. Mike, pouvez-vous mettre à jour votre message pour refléter cela?
John Mark Mitchell