Je suis nouveau sur Unix et j'ai besoin d'aide ici ..__ J'ai deux répertoires sur deux serveurs différents. les deux répertoires contiennent les mêmes fichiers. Maintenant, je veux vérifier si tous les fichiers sont synchronisés dans les deux répertoires. Si les fichiers ne sont pas synchronisés, je souhaite afficher uniquement le nom de ces fichiers . Je peux le faire lorsque les répertoires se trouvent sur le même serveur pas capable de comprendre comment faire cela lorsque des répertoires sont présents sur deux serveurs différents.
eg:
server1 /abc/home/sample1/
server2 /abc/home/sample2/
ici, je veux que seuls les noms de fichiers soient affichés s’ils ne sont pas synchronisés.
Merci d'avance
Vous pouvez utiliser rsync avec l'indicateur -n
pour savoir si les fichiers sont synchronisés, sans effectuer de synchronisation.
Par exemple, à partir de server1 :
rsync -n -avrc /abc/home/sample1/* server2:/abc/home/sample2/
Ceci imprimera les noms de tous les fichiers (récursifs, avec l'indicateur -r
) qui diffèrent entre server1:/abc/home/sample1/
et server2:/abc/home/sample2/
.
rsync
explication des paramètres utilisés
-n, --dry-run
- effectuer un essai sans modifications
-a, --archive
- mode archive; est égal à -rlptgoD (no -H, -A, -X)
-v, --verbose
- augmente la verbosité
-r, --recursive
- recurse dans des répertoires
-c, --checksum
- Sauter en fonction de la somme de contrôle, pas de la durée et de la taille du mod
Sur le serveur1:
cd /abc/home/sample1/ && diff --side-by-side --suppress-common-lines <(find . -type f|xargs stat --printf "%s\t%n\n"|sort -n) <(ssh server2 "cd /abc/home/sample2/ && find . -type f|xargs stat --printf \"%s\t%n\n\"|sort -n")
C'est assez rapide mais probablement pas aussi précis que rsync puisqu'il utilise la taille du fichier au lieu du hachage de contenu. De plus, la réponse de rsync de kielni ne montrera rien si server2 a plus de fichiers que server1. Essayez plutôt ceci:
rsync -n -avr --size-only --delete /abc/home/sample1/ server2:/abc/home/sample2/
En cas d'absence de connectivité entre deux serveurs, utilisez la commande "tree" pour obtenir la structure de répertoires dans les fichiers, puis diff deux fichiers.
J'utilise toujours rsync -avcn
pour ces tâches - je suis un fan de la CLI. L'idée est de faire un "essai" (-n
), qui montre ce qui aurait été fait sans copier réellement aucun fichier ni y apporter de modification. Utiliser le commutateur -c
est vraiment important car il utilise la somme de contrôle plutôt que la date de modification ou la taille du fichier pour déterminer si les fichiers sont différents. -a
s'assure que la comparaison est plus approfondie et oblige le programme à plonger dans les sous-répertoires. Enfin, -v
augmente le niveau de verbosité, ce qui est utile dans le cas où différents fichiers sont trouvés.
Donc, une solution possible va quelque chose comme ceci:
rsync -avcn source_dir/ dest_dir/
et rsync
affichera les noms des fichiers différents entre les deux répertoires. Notez les barres obliques finales - elles sont essentielles.
Cependant:
rsync -avcn source_dir/ dest_dir/ > diffs.txt
rsync -avcn /src/My Dir/ dest/My dir/
n'est pas ce que vous voulez; vous devriez plutôt utiliser rsync -avcn /src/My\ Dir/ dest/My\ Dir/
ou peut-être rsync -avcn /src/"My Dir"/ dest/"My Dir"/
. Ce point est particulièrement valable pour les montages Windows.