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