Existe-t-il un outil Linux comme diff qui comparera récursivement les fichiers et les répertoires, mais avec en plus la comparaison: attributs étendus, acl, contextes se?
Existe-t-il un outil Linux comme diff qui comparera récursivement les fichiers et les répertoires, mais avec en plus la comparaison: attributs étendus, acl, contextes se?
Réponses:
J'ai fait cela avant d'utiliser le rsync -aHAX --delete
rappel pour ajouter les drapeaux -n
et -i
.
C'est un peu contre-intuitif, mais soyez indulgent avec moi. La rsync
commande principale est ce dont vous auriez besoin pour synchroniser les deux répertoires ensemble. Mais -n -i
il ne se synchronise pas (c.-à-d. Effectue un essai à sec) et imprime simplement ce qu'il aurait fait et pourquoi. Il n'est pas fantastique d'analyser, mais vous pouvez facilement extraire le nom de fichier et le diriger vers ls
ou similaire.
Cela examinera tout, y compris mtimes, dates, etc., ainsi que ne pas suivre les nœuds de périphérique, les sockets, les canaux nommés, etc. La ligne de commande ci-dessus examine également les ACL et les attributs étendus. Vous pouvez ajuster ce que vous regardez en modifiant les options rsync
, en le limitant à un seul appareil -x
, en modifiant le comportement des liaisons souples et matérielles, etc., etc.
janos a déjà dit quoi faire:
find /a -exec stat -c '%A %C %F %g %u %s %Y %n' {} \; >a
find /b -exec stat -c '%A %C %F %g %u %s %Y %n' {} \; >b
diff -u a b
Et man 1 stat
dit:
%A access rights in human readable form
%C SELinux security context string
%F file type
%g group ID of owner
%u user ID of owner
%s total size, in bytes
%Y time of last modification, seconds since Epoch
%n file name
Pour comparer le contenu du fichier, vous pouvez utiliser:
find -type f -exec md5sum '{}' ';' | sort | uniq --all-repeated=separate -w 33 | cut -c 35-
as described here: http://www.commandlinefu.com/commands/view/3555/find-duplicate-files-based-on-size-first-then-md5-hash
find
a les fonctionnalités de GNU stat
intégrées (et est antérieure à la statistique GNU de plusieurs décennies). Vous voudrez également trier la sortie avant de différer. Et vous avez besoin (cd /a && find . ...)
sinon toutes les lignes différeront à cause de /a
vs /b
dans le chemin du fichier.
Voici un script bash rapide que j'ai écrit pour comparer les attributs étendus. Il affiche chaque nom de fichier, puis toutes les différences d'attributs:
cd a
export relpath=[path/to/b/from/a]
for filename in $(find .);
do
echo $filename;
diff <(xattr -l $filename) <(xattr -l $relpath/$filename);
done
Empruntant à une autre réponse, nous pouvons la modifier pour l'utiliser stat
au lieu de xattr
:
for filename in $(find .);
do
echo $filename;
diff <(stat -c '%A %C %F %g %u %s %Y' $filename) <(stat -c '%A %C %F %g %u %s %Y' $relpath/$filename);
done