/ / Jak znaleźć zmienione nazwy plików między katalogami Linuksa jak na zawartość pliku przy użyciu Md5sum, a następnie polecenia diff - bash

Jak znaleźć nazwy plików między katalogami Linuksa, jak na zawartość pliku przy użyciu Md5sum, a następnie polecenia diff - bash

Mam dwa katalogi linuksa dir1 i dir2 zniektóre pliki w obu. Teraz chcę listę nazw plików z dodanymi plikami i pliki usunięte w dir2 w porównaniu do dir1. Pliki powinny być porównywane zgodnie z danymi lub zawartością w pliku. Jestem nowicjuszem w skryptach linux bash. Proszę pomóż mi.

Obecnie robię to jak poniżej:

find dir1 -iname *.c -o -iname *.h -o -iname *.prm | xargs -n1 md5sum > dir1.fingerprint.md5sum
find dir2 -iname *.c -o -iname *.h -o -iname *.prm | xargs -n1 md5sum > dir2.fingerprint.md5sum
cat dir1.fingerprint.md5sum | cut -d" " -f1 | sort -u > dir1.fingerprint
cat dir2.fingerprint.md5sum | cut -d" " -f1 | sort -u > dir2.fingerprint
diff -NrU 2 dir1.fingerprint dir2.fingerprint

Otrzymuję wynik jako niektóre zmiany id jak pokazano poniżej:

--- dir1.fingerprint    2013-03-08 11:57:24.421311354 +0530
+++ dir2.fingerprint    2013-03-08 11:57:34.901311856 +0530
@@ -1,3 +1,3 @@
-43551a78e0f5b0be4aec23fdab881e65
-4639647e4f86eb84987cd01df8245d14
4c9cc7c6332b4105197576f66d1efee7
+9f944e70cb20b275b2e9b4f0ee26141a
+d41d8cd98f00b204e9800998ecf8427e

Chcę wynik jako nazwy plików dla plików zmodyfikowanych lub dodanych nowo do dir2. Jak to uzyskać. Proszę pomóż mi.

Odpowiedzi:

0 dla odpowiedzi № 1

Wypróbuj ten skrypt z argumentami dir2 i dir1

#!/bin/sh
if [ "x$1" == "x" ]
then
exit 0
fi
if [ "x$2" == "x" ]
then
exit 0
fi
#echo "DIFF $1 $2"
if [ -f $1 ]
then
if [ -e $2 ]
then
diff $1 $2 >/dev/null
if [ "$?" != "0" ]
then
echo "DIFFERENT $1"
fi
fi
exit 0
fi
if [ "x`ls $1`" != "x" ]
then
for f in `ls $1`
do
$0 $1/$f $2/$f
done
fi
exit 0

EDYTOWAĆ:

if [ "x`ls $1`" != "x" ]
then
for f in `ls $1`
do
if [ -f $1/$f ]
then
for g in `ls $2`
do
if [ -f $2/$g ]
then
diff $1/$f $2/$g >/dev/null
if [ "$?" == "0" ]
then
echo "SAME CONTENT $1/$f $2/$g"
fi
fi
done
fi
done
fi