J'utilise actuellement rsync
un script qui déploie une application PHP à partir d'un transfert vers un serveur de production. Voici comment:
rsync -rzai --progress --stats --ignore-times --checksum /tmp/app_export/ root@app.com:/var/www/html/app/
Cela génère actuellement une liste de tous les fichiers qui sont comparés (tous les fichiers du projet), mais j'aimerais qu'il ne génère que les fichiers modifiés, je peux donc l'exécuter avec une --dry-run
option pour vérifier que chaque déploiement ne met à jour que le fichiers souhaités.
REMARQUE: le mieux que j'ai pu faire jusqu'à présent est grep fcst
les résultats, mais je recherche une rsync
option qui est sûre, mais je ne la trouve pas dans les pages de manuel.
Merci d'avance!
-P
pour le progrès, c'est exactement ce qui se passe dans le-n
cadre du dryrun, mais ce-i
n'est pas faux non plus. Voir ma réponse ci-dessous.Utilisez l'
--out-format
optionSelon la page de manuel:
Si vous n'avez besoin que des noms de fichiers réels (
--out-format="%n"
), votre commande d'exécution à sec pourrait ressembler à ceci:rsync -rzan --out-format="%n" --ignore-times --checksum /tmp/app_export/ [email protected]:/var/www/html/app/
Lorsque rsync est appelé avec
-v
, il utilise en interne cette option avec un format par défaut de"%n%L"
, qui vous indique uniquement le nom du fichier et, si l'élément est un lien, où il pointe.Mais cela inclut également un bref résumé au début et à la fin du processus de synchronisation.
Pour vous débarrasser de ce résumé, utilisez
--out-format
directement l' option.Btw.
-i
utilise également en interne--out-format
, mais avec un format de"%i %n%L"
.la source
À partir de rsync v3.1.0, sorti en 2013, il y a le
--info
drapeau qui permet un contrôle fin sur la sortie.Les
--info
drapeaux disponibles sont:la source
Je ne sais pas si cela diffère entre les versions / options utilisées, mais dans la version mys lorsque j'utilise l'
-i
option, j'obtiens une liste comme:Donc, une solution simple pour obtenir uniquement une liste des fichiers réellement transférés est simplement exécutée:
Cela masquera simplement toutes les lignes contenant
f..T......
. Si efficacement, cela masquera des fichiers identiques.la source
En fait, vous avez en quelque sorte répondu à votre propre question, car votre commande d'origine l'a déjà:
--progress
C'est l'option correcte, bien que la page de manuel soit un peu cryptée:
Cela a un peu de sens, puisque vous invoquez votre
rsync
chaîne avec le mode dryrun, aucun transfert ne se produit, mais vous auriez encore des progrès: à savoir les fichiers qui ont changé et qui seraient transférés.De cette façon, vous obtenez une petite liste soignée de tous les fichiers, par exemple:
La destination possède déjà une copie du fichier modifié qui a été mis à jour dans la source et de l'ancien fichier, qui reste inchangé. La source a également un fichier supplémentaire: newfile.
Si nous
-i
invoquons ensuite votre commande rsync, mais supprimons l'item et ajoutez simplement dryrun-n
Vous obtenez une liste des seuls fichiers que rsync transfèrerait: changéfichier et nouveaufichier.
la source