Mit dem BSD-Tool mtree kann eine Datei-Hierarchie mit einer Spezifikation verglichen werden, wobei diese Spezifikation ebenfalls mit mtree erstellt werden kann. So kann man mit mtree geänderte Dateien finden, es ist jedoch auch möglich, Dateien, die nicht der Spezifikation entsprechen, zu löschen oder geänderte Dateirechte wiederherzustellen.
Nehmen wir mal an, man hat ein paar Dateien:
$ find .
.
./file2
./dir
./dir/abc
./dir/ccc
./file1
Bevor man mit mtree etwas vergleichen kann, benötigt man eine Spezifikation der Dateien. Diese erstellen wir mit mtree -c
.
$ mtree -c > ../spec
$ cat ../spec
# user: olaf
# machine: m2.fritz.box
# tree: /Users/olaf/Desktop/test
# date: Mon Dec 18 18:50:28 2017
# .
/set type=file uid=501 gid=20 mode=0644 nlink=1 flags=none
. type=dir mode=0755 nlink=5 size=160 \
time=1513618591.304192231
file1 size=6 time=1513619185.055667000
file2 size=13 time=1513619203.579709605
# ./dir
dir type=dir mode=0755 nlink=4 size=128 \
time=1513618608.749249207
abc size=6 time=1513618604.803276546
ccc size=5 time=1513618611.066866426
# ./dir
..
..
Nun hat man eine Spezifikation, mit der man später die Dateien vergleichen kann.
$ touch dir/abc
$ echo "Hello World" > file1
$ mtree < ../spec
dir/abc changed
modification time expected Mon Dec 18 18:36:44 2017.803276546 found Mon Dec 18 18:56:22 2017.582045000
file1 changed
size expected 6 found 12
modification time expected Mon Dec 18 18:46:25 2017.055667000 found Mon Dec 18 18:57:03 2017.596168115
Wie man sieht, werden standardmäßig nur wenige Eigenschaften im der Spezifikation gespeichert, man hat jedoch eine große Auswahl an sogenannten keywords, die pro Datei gespeichert werden sollen. Diese können mit der -K
-Option angegeben werden.
$ mtree -c -K sha256digest
Das Tool ist zwar ein BSD-Tool und unter Linux standardmäßig nicht anzutreffen, ich habe aber zumindestens einen Port gefunden. Und unter Ubuntu gibt es das Paket freebsd-buildutils, welches das Tool fmtree enthält.
Kommentare