Page 1 sur 1

Logiciel pour comparer deux fichiers et extraire les différences dans un troisième ?

Posté : jeu. 29 déc. 2022, 12:15
par Mornagest
Salut,

J'essaie de comparer deux fichiers entre eux (une grosse centaine de modifications) et de copier les lignes différentes du fichier A vers un fichier C qui ne recensera donc QUE les différences, pas les points communs.

Existe-t-il un logiciel qui permette de faire cela de manière automatisée ? À défaut, de montrer les différences, mais que je puisse les sélectionner, les copier manuellement et les coller manuellement dans un fichier à part ?

J'ai tenté KDiff3, c'est impossible de comprendre comment se servir de ce machin. J'ai pu copier-coller des lignes, puis je n'ai plus pu, puis le logiciel a de nouveau accepté que je copie des lignes pendant quelques occurrences, puis de nouveau plus possible... bref, je passe plus de temps à vérifier que ce que je sélectionne est bien copiable que de récupérer mes modifications.

Donc, si un logiciel peut extraire les différences, ça m'arrangerait... surtout que je n'ai pas deux fichiers à comparer mais une vingtaine de couples de fichiers.

Merci d'avance !

Re: Logiciel pour comparer deux fichiers et extraire les différences dans un troisième ?

Posté : jeu. 29 déc. 2022, 12:30
par JohnBob
Coucou, il y a l'extension Compare de notepad, tu peux facilement l’intégrer en allant dans l'onglet Modules d'extension / Gestionnaire des modules d'extension puis tu trouveras "Compare".

C'est pas magique non-plus comme extension, mais ça peut te dépanner...

Pour KDiff3 quand tu surlignes ton texte avec Ctrl-C, normalement ça fonctionne toujours pour copier, mais c'est vrai qu'il n'est pas très pratique...

Je jongle entre les deux en fonction des types de fichiers...

Par contre pour extraire directement les différences je ne sais pas comment faire !

Ça vaut peut-être le coup d'attendre de voir ce que d'autres utilisent...

Re: Logiciel pour comparer deux fichiers et extraire les différences dans un troisième ?

Posté : jeu. 29 déc. 2022, 13:04
par Mornagest
Merci pour ta réponse ^^

Je pensais aussi que le raccourci Ctrl + C fonctionnait partout, mais ce n'est pas le cas ici. D'autant que dans le menu d'édition, l'option pour Copier est grisée de temps à autre sans que je comprenne pourquoi.

Quand tu parles de Notepad, c'est Notepad++ je présume ?

Re: Logiciel pour comparer deux fichiers et extraire les différences dans un troisième ?

Posté : jeu. 29 déc. 2022, 14:08
par vv221
La commande diff sous Linux devrait permettre ça.

Pour visualiser les différences à l’échelle de tout le fichier (il faut chercher dans la colonne centrale les chevrons >/< pour les lignes ajoutées/retirées et les barres verticales | pour les lignes modifiées) :

Code : Tout sélectionner

diff --side-by-side /etc/ssh/sshd_config /etc/ssh/sshd_config.ucf-old

Code : Tout sélectionner

							      >	#	$OpenBSD: sshd_config,v 1.103 2018/04/09 20:41:22 tj 

# This is the sshd server system-wide configuration file.  Se	# This is the sshd server system-wide configuration file.  Se
# sshd_config(5) for more information.				# sshd_config(5) for more information.

# This sshd was compiled with PATH=/usr/local/bin:/usr/bin:/b |	# This sshd was compiled with PATH=/usr/bin:/bin:/usr/sbin:/s

# The strategy used for options in the default sshd_config sh	# The strategy used for options in the default sshd_config sh
# OpenSSH is to specify options with their default value wher	# OpenSSH is to specify options with their default value wher
# possible, but leave them commented.  Uncommented options ov	# possible, but leave them commented.  Uncommented options ov
# default value.						# default value.

Include /etc/ssh/sshd_config.d/*.conf				Include /etc/ssh/sshd_config.d/*.conf

#Port 22							#Port 22
#AddressFamily any						#AddressFamily any
#ListenAddress 0.0.0.0						#ListenAddress 0.0.0.0
#ListenAddress ::						#ListenAddress ::

#HostKey /etc/ssh/ssh_host_rsa_key				#HostKey /etc/ssh/ssh_host_rsa_key
#HostKey /etc/ssh/ssh_host_ecdsa_key				#HostKey /etc/ssh/ssh_host_ecdsa_key
#HostKey /etc/ssh/ssh_host_ed25519_key				#HostKey /etc/ssh/ssh_host_ed25519_key

# Ciphers and keying						# Ciphers and keying
#RekeyLimit default none					#RekeyLimit default none

# Logging							# Logging
#SyslogFacility AUTH						#SyslogFacility AUTH
#LogLevel INFO							#LogLevel INFO

# Authentication:						# Authentication:

#LoginGraceTime 2m						#LoginGraceTime 2m
#PermitRootLogin prohibit-password				#PermitRootLogin prohibit-password
#StrictModes yes						#StrictModes yes
#MaxAuthTries 6							#MaxAuthTries 6
#MaxSessions 10							#MaxSessions 10

#PubkeyAuthentication yes					#PubkeyAuthentication yes

# Expect .ssh/authorized_keys2 to be disregarded by default i	# Expect .ssh/authorized_keys2 to be disregarded by default i
#AuthorizedKeysFile	.ssh/authorized_keys .ssh/authorized_	#AuthorizedKeysFile	.ssh/authorized_keys .ssh/authorized_

#AuthorizedPrincipalsFile none					#AuthorizedPrincipalsFile none

#AuthorizedKeysCommand none					#AuthorizedKeysCommand none
#AuthorizedKeysCommandUser nobody				#AuthorizedKeysCommandUser nobody

# For this to work you will also need host keys in /etc/ssh/s	# For this to work you will also need host keys in /etc/ssh/s
#HostbasedAuthentication no					#HostbasedAuthentication no
# Change to yes if you don't trust ~/.ssh/known_hosts for	# Change to yes if you don't trust ~/.ssh/known_hosts for
# HostbasedAuthentication					# HostbasedAuthentication
#IgnoreUserKnownHosts no					#IgnoreUserKnownHosts no
# Don't read the user's ~/.rhosts and ~/.shosts files		# Don't read the user's ~/.rhosts and ~/.shosts files
#IgnoreRhosts yes						#IgnoreRhosts yes

# To disable tunneled clear text passwords, change to no here	# To disable tunneled clear text passwords, change to no here
#PasswordAuthentication yes				      |	#PasswordAuthentication no
#PermitEmptyPasswords no					#PermitEmptyPasswords no

# Change to yes to enable challenge-response passwords (bewar	# Change to yes to enable challenge-response passwords (bewar
# some PAM modules and threads)					# some PAM modules and threads)
KbdInteractiveAuthentication no				      |	ChallengeResponseAuthentication no

# Kerberos options						# Kerberos options
#KerberosAuthentication no					#KerberosAuthentication no
#KerberosOrLocalPasswd yes					#KerberosOrLocalPasswd yes
#KerberosTicketCleanup yes					#KerberosTicketCleanup yes
#KerberosGetAFSToken no						#KerberosGetAFSToken no

# GSSAPI options						# GSSAPI options
#GSSAPIAuthentication no					#GSSAPIAuthentication no
#GSSAPICleanupCredentials yes					#GSSAPICleanupCredentials yes
#GSSAPIStrictAcceptorCheck yes					#GSSAPIStrictAcceptorCheck yes
#GSSAPIKeyExchange no						#GSSAPIKeyExchange no

# Set this to 'yes' to enable PAM authentication, account pro	# Set this to 'yes' to enable PAM authentication, account pro
# and session processing. If this is enabled, PAM authenticat	# and session processing. If this is enabled, PAM authenticat
# be allowed through the KbdInteractiveAuthentication and     |	# be allowed through the ChallengeResponseAuthentication and
# PasswordAuthentication.  Depending on your PAM configuratio	# PasswordAuthentication.  Depending on your PAM configuratio
# PAM authentication via KbdInteractiveAuthentication may byp |	# PAM authentication via ChallengeResponseAuthentication may 
# the setting of "PermitRootLogin without-password".		# the setting of "PermitRootLogin without-password".
# If you just want the PAM account and session checks to run 	# If you just want the PAM account and session checks to run 
# PAM authentication, then enable this but set PasswordAuthen	# PAM authentication, then enable this but set PasswordAuthen
# and KbdInteractiveAuthentication to 'no'.		      |	# and ChallengeResponseAuthentication to 'no'.
UsePAM yes							UsePAM yes

#AllowAgentForwarding yes					#AllowAgentForwarding yes
#AllowTcpForwarding yes						#AllowTcpForwarding yes
#GatewayPorts no						#GatewayPorts no
X11Forwarding yes						X11Forwarding yes
#X11DisplayOffset 10						#X11DisplayOffset 10
#X11UseLocalhost yes						#X11UseLocalhost yes
#PermitTTY yes							#PermitTTY yes
PrintMotd no							PrintMotd no
#PrintLastLog yes						#PrintLastLog yes
#TCPKeepAlive yes						#TCPKeepAlive yes
#PermitUserEnvironment no					#PermitUserEnvironment no
#Compression delayed						#Compression delayed
#ClientAliveInterval 0						#ClientAliveInterval 0
#ClientAliveCountMax 3						#ClientAliveCountMax 3
#UseDNS no							#UseDNS no
#PidFile /run/sshd.pid					      |	#PidFile /var/run/sshd.pid
#MaxStartups 10:30:100						#MaxStartups 10:30:100
#PermitTunnel no						#PermitTunnel no
#ChrootDirectory none						#ChrootDirectory none
#VersionAddendum none						#VersionAddendum none

# no default banner path					# no default banner path
#Banner none							#Banner none

# Allow client to pass locale environment variables		# Allow client to pass locale environment variables
AcceptEnv LANG LC_*						AcceptEnv LANG LC_*

# override default of no subsystems				# override default of no subsystems
Subsystem	sftp	/usr/lib/openssh/sftp-server		Subsystem	sftp	/usr/lib/openssh/sftp-server

# Example of overriding settings on a per-user basis		# Example of overriding settings on a per-user basis
#Match User anoncvs						#Match User anoncvs
#	X11Forwarding no					#	X11Forwarding no
#	AllowTcpForwarding no					#	AllowTcpForwarding no
#	PermitTTY no						#	PermitTTY no
#	ForceCommand cvs server					#	ForceCommand cvs server

Pour n’afficher que les lignes différentes :

Code : Tout sélectionner

diff /etc/ssh/sshd_config /etc/ssh/sshd_config.ucf-old

Code : Tout sélectionner

0a1
> #     $OpenBSD: sshd_config,v 1.103 2018/04/09 20:41:22 tj Exp $
5c6
< # This sshd was compiled with PATH=/usr/local/bin:/usr/bin:/bin:/usr/games
---
> # This sshd was compiled with PATH=/usr/bin:/bin:/usr/sbin:/sbin
57c58
< #PasswordAuthentication yes
---
> #PasswordAuthentication no
62c63
< KbdInteractiveAuthentication no
---
> ChallengeResponseAuthentication no
78c79
< # be allowed through the KbdInteractiveAuthentication and
---
> # be allowed through the ChallengeResponseAuthentication and
80c81
< # PAM authentication via KbdInteractiveAuthentication may bypass
---
> # PAM authentication via ChallengeResponseAuthentication may bypass
84c85
< # and KbdInteractiveAuthentication to 'no'.
---
> # and ChallengeResponseAuthentication to 'no'.
102c103
< #PidFile /run/sshd.pid
---
> #PidFile /var/run/sshd.pid

Et enfin une petite bidouille pour n’afficher que les lignes ajoutées (ou modifiées) :

Code : Tout sélectionner

diff /etc/ssh/sshd_config /etc/ssh/sshd_config.ucf-old | sed --silent 's/^> \(.*\)/\1/p'

Code : Tout sélectionner

#       $OpenBSD: sshd_config,v 1.103 2018/04/09 20:41:22 tj Exp $
# This sshd was compiled with PATH=/usr/bin:/bin:/usr/sbin:/sbin
#PasswordAuthentication no
ChallengeResponseAuthentication no
# be allowed through the ChallengeResponseAuthentication and
# PAM authentication via ChallengeResponseAuthentication may bypass
# and ChallengeResponseAuthentication to 'no'.
#PidFile /var/run/sshd.pid

Re: Logiciel pour comparer deux fichiers et extraire les différences dans un troisième ?

Posté : jeu. 29 déc. 2022, 14:14
par Mornagest
J'ai vaguement tenté du côté de diff mais j'ai effectivement vu qu'il fallait coupler cela à sed et des expressions régulières dont je ne comprends pas le moindre premier mot, donc j'ai lâchement laissé tomber :gign:

Merci pour ta réponse, je ferai un essai ce soir ou demain et je te dis si ça fonctionne :)

Re: Logiciel pour comparer deux fichiers et extraire les différences dans un troisième ?

Posté : jeu. 29 déc. 2022, 14:15
par vv221
Les expressions régulières, je fais partie de cette poignée de masochistes que ça amuse :D

Re: Logiciel pour comparer deux fichiers et extraire les différences dans un troisième ?

Posté : jeu. 29 déc. 2022, 16:56
par JohnBob
Mornagest a écrit : jeu. 29 déc. 2022, 13:04 Je pensais aussi que le raccourci Ctrl + C fonctionnait partout, mais ce n'est pas le cas ici. D'autant que dans le menu d'édition, l'option pour Copier est grisée de temps à autre sans que je comprenne pourquoi.
Oui des fois les menus sont grisé, mais quand je clique dessus ça les dégrise... mystère...
Mornagest a écrit : jeu. 29 déc. 2022, 13:04 Quand tu parles de Notepad, c'est Notepad++ je présume ?
En effet !

Il y a Winmerge aussi, qui semble maintenu, pas encore vraiment testé.

Re: Logiciel pour comparer deux fichiers et extraire les différences dans un troisième ?

Posté : jeu. 29 déc. 2022, 22:26
par lefreut
Winmerge devrait permettre de le faire. Tu peux comparer tes fichiers, ne voir que les différences entre les 2, générer un fichier contenant ces différences. Tu peux aussi le faire sur 2 répertoires pour comparer tous les fichiers à l'intérieur.

Re: Logiciel pour comparer deux fichiers et extraire les différences dans un troisième ?

Posté : ven. 30 déc. 2022, 09:25
par Luren
Hello,
J'utilise Araxis Merge, qui permet de comparer des fichiers de type texte mais aussi le contenu de 2 dossiers, des fichiers binaires et des images (je crois me rappeler que pour les images c'est pas top, mais c'est hors sujet). Les différences sont mises en surbrillance, on peut facilement naviguer entre elles, et les ajouter/supprimer dans un sens ou dans l'autre, bref, c'est super pratique...
J'ignore en revanche si il permet de résumer le tout dans un troisième fichier (à priori, non). Le logiciel permet de générer un rapport en html/xml qui pourrait s'apparenter au troisième fichier que tu cherches mais ça reste à creuser sur ce point .

Re: Logiciel pour comparer deux fichiers et extraire les différences dans un troisième ?

Posté : ven. 30 déc. 2022, 09:44
par Mornagest
Pour l'instant je suis passé par WinMerge, qui me permet de sélectionner les différences, les copier et les coller dans un fichier à part.

Je suis obligé de travailler comme ça car je cherche les différences entre fichiers .css :

Fichier modifié :

Code : Tout sélectionner

body {
	font-family: verdana, geneva, lucida, "lucida grande", arial, helvetica, Sans-serif;
	font-size: 10px;
	line-height: normal;
	margin: 0;
	padding: 12px 0;
	word-wrap: break-word;
	-webkit-print-color-adjust: exact;
}
Fichier d'origine :

Code : Tout sélectionner

body {
	font-family: Verdana, Helvetica, Arial, sans-serif;
	font-size: 10px;
	line-height: normal;
	margin: 0;
	padding: 12px 0;
	word-wrap: break-word;
	-webkit-print-color-adjust: exact;
}
Sauf qu'évidemment, il va trouver une différence sur cette ligne :

Code : Tout sélectionner

	font-family: verdana, geneva, lucida, "lucida grande", arial, helvetica, Sans-serif;
mais je souhaite bien sûr récupérer l'ensemble de la consigne CSS pour l'élément body, sinon, mon .css final ne sert pas à grand-chose ^^

Donc, en copiant-collant, ça fonctionne, et je pense que c'est le plus adapté à mon usage précis actuel :)