Ich würde die Antwort von @ user1464130 anpassen, da es Probleme bei der Behandlung von Leerzeichen in Dateinamen hat.
cd dir1
find . -type f -printf "%p %s\n" | sort > ~/dir1.txt
cd dir2
find . -type f -printf "%p %s\n" | sort > ~/dir2.txt
diff ~/dir1.txt ~/dir2.txt
Wenn Sie einen Befehl für jede Datei gestartet werden sollen und das Ergebnis in dem Bericht verwenden, können Sie das while
Bash-Konstrukt verwenden. In diesem Beispiel wird md5sum
verwendet, um eine Prüfsumme für jede Datei zu berechnen.
find . -maxdepth 1 -type f -printf "%p %s\n" | while read path size; do echo "$path - $(md5sum $path | tr -s " " | cut -f 1 -d " ") - $size" ; done
Jeder $()
wird separat ausgeführt und ermöglicht es uns, die Prüfsumme für jede Datei zu berechnen. Die Verwendung von tr
quetscht alle aufeinanderfolgenden Leerzeichen in ein einzelnes Leerzeichen und extrahiert das Wort in der n-ten Position, hier in der ersten Position. Wenn wir das nicht tun, erhalten wir den Namen der Datei zweimal, weil md5sum
es auf stdout zurückgibt.
Hier ist ein Beispiel ohne Verwendung des Vergleichs (keine diff
). Beachten Sie, dass ich einen Bindestrich verwendet habe, um die drei Daten hervorzuheben, die wir über jede Datei ausgeben, aber es könnte ein Problem sein, wenn Sie es einem anderen Programm zuführen möchten.
$ find . -maxdepth 1 -name "*.c" -type f -printf "%p %s\n" | while read path size; do echo "$path - $(md5sum $path | tr -s " " | cut -f 1 -d " ") - $size" ; done
./thread.c - 5f2b7b12c7cd12fcb9e9796078e5d15b - 584
./utils.c - d61bc1dbc72768e622a04f03e3b8f7a2 - 3413
One-Liner gefunden Lösungen für damit verbundene Frage Unix Stack: http://unix.stackexchange.com/q/62140 – tanius