[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Outils de comparaison de fichier à deux panneaux



Bonjour,


C'est juste à un instant T (pas besoin de crontab) comparer les fichiers du disque d'un ordi à un disque externe. Et c'est bien sur le système de fichier local d'un pc (pas d'un serveur qui fait de nombreuse écritures en permanence).

Il n'est même pas nécessaire de retrouver deux fichiers de nom distincts mais de contenus identiques.

Je me suis demandé si je ne pourrais pas opter pour un outil rudimentaire DIY en bash avec zenity:

Faire une mise à jour de la liste des fichiers du système avec updatedb (disque externe non branché)
https://manpages.org/updatedb


Boucler sur tous les fichiers du disque externe jusqu'au fond de chaque arborescence.
Pour chaque fichier cliqué :
locate nomFichier

si trouvé comparer le plus récent
Si pas trouvé proposer de le copier dans le panneau opposé.

Un truc aussi rudimentaire me conviendrait pour mettre de l'ordre dans des fichiers à un instant T sur un PC, qui ne fait rien d'autre.
Pas sur un serveur qui écrit en permanence sur le disque

Mais si ça existe, je prends!

Je ne vais pas réinventer la roue, même si ça peut être amusant à écrire ! ;-)

Est-ce que je dis une grosse bêtise et sous-estime la difficulté de la tâche ?

--

Benoît

Le 23/02/25 à 14:55, Basile Starynkevitch a écrit :
On Sun, 2025-02-23 at 14:36 +0100, Benoît Barbier wrote:
Bonjour,

Je recherche un outil de comparaison de répertoires à deux panneaux qui
fonctionnerait comme un outil diff comme meld pour comparer deux
répertoires ou deux arborescences.
Avec la possibilité de pousser la différence à gauche ou à droite, qui
montre le plus récent.
Cf.
https://meldmerge.org/

Le problème qui se pose : dans le panneau de gauche j’ai un fichier sur
un disque dur externe, il n’est pas dans le répertoire du même nom dans
le panneau de droite, mais ne serait-il pas autre part dans
l’arborescence du disque dur ?

Il faudrait un outil qui travail avec la base de donnée updatedb/locate
ou qui a une autre méthode pour me signaler que le fichier n’est pas
dans le panneau opposé mais autre part sur le disque.

Il me semble que GNU emacs a un mode qui convient.

s'il s'agit de retrouver deux fichiers de nom distincts mais de contenus
identiques, on pourrait s'inspirer de ccache https://ccache.dev/ comme de
https://www.softwareheritage.org/

Ou envisager de construire une base de données (peut-être avec Redis ou sqlite)
qui stocke des métadonnées dont une signature (md5sum ou sha512) du contenu de
chaque fichier (préalablement balayé, par exemple toutes les heures, par un
démon lancé par crontab).

Le problème posé me parait toutefois insoluble en toute rigueur sur un Linux,
car deux processus différents peuvent accéder à (voire modifier) un même fichier
simultanément.

Sans verrouillage explicite et  volontaire par des appels systèmes tels que
  https://man7.org/linux/man-pages/man3/lockf.3.html   ou
https://man7.org/linux/man-pages/man2/flock.2.html ou
https://man7.org/linux/man-pages/man3/flockfile.3.html ou
https://man7.org/linux/man-pages/man2/mlock.2.html le comportement n'est pas
prévisible ni même défini.

C'est déjà compliqué sur un système de fichier local (voir
https://man7.org/linux/man-pages/man7/inode.7.html comme ext4 ou xfs) et encore
plus compliqué sur un système de fichier distant (NFS).

D'ailleurs les SGBD comme les versionneurs existent aussi pour ça.

Voyez aussi http://projects.camlcity.org/projects/omake.html qui pourrait avoir
du code convenable (à compléter).

En fait je crois que le problème est insoluble si on cherche une solution
robuste et générale.

Librement



Reply to: