Mit md5deep
md5deep -r path/to/dir > sums.md5
Mit find
und md5sum
find relative/path/to/dir -type f -exec md5sum {} + > sums.md5
bewusst sein, dass, wenn Sie mit md5sum -c sums.md5
auf Ihren MD5-Summen laufen zu überprüfen, müssen Sie es aus dem gleichen Verzeichnis ausgeführt werden, von denen Sie haben sums.md5
Datei generiert. Dies liegt daran, dass find
Pfade ausgibt, die sich auf Ihren aktuellen Standort beziehen, die dann in die Datei sums.md5
eingegeben werden.
Wenn dies ein Problem ist, können Sie relative/path/to/dir
absolut machen (z. B. indem Sie $PWD/
vor Ihren Pfad setzen). Auf diese Weise können Sie von jedem beliebigen Ort aus auf sums.md5
überprüfen. Nachteil ist, dass jetzt sums.md5
absolute Pfade enthält, was es größer macht.
Voll ausgestattete Funktion find
und md5sum
Sie diese Funktion, um Ihre .bashrc
Datei setzen können (in Ihrem $HOME
Verzeichnis):
function md5sums {
if [ "$#" -lt 1 ]; then
echo -e "At least one parameter is expected\n" \
"Usage: md5sums [OPTIONS] dir"
else
local OUTPUT="checksums.md5"
local CHECK=false
local MD5SUM_OPTIONS=""
while [[ $# > 1 ]]; do
local key="$1"
case $key in
-c|--check)
CHECK=true
;;
-o|--output)
OUTPUT=$2
shift
;;
*)
MD5SUM_OPTIONS="$MD5SUM_OPTIONS $1"
;;
esac
shift
done
local DIR=$1
if [ -d "$DIR" ]; then # if $DIR directory exists
cd $DIR # change to $DIR directory
if [ "$CHECK" = true ]; then # if -c or --check option specified
md5sum --check $MD5SUM_OPTIONS $OUTPUT # check MD5 sums in $OUTPUT file
else # else
find . -type f ! -name "$OUTPUT" -exec md5sum $MD5SUM_OPTIONS {} + > $OUTPUT # Calculate MD5 sums for files in current directory and subdirectories excluding $OUTPUT file and save result in $OUTPUT file
fi
cd - > /dev/null # change to previous directory
else
cd $DIR # if $DIR doesn't exists, change to it to generate localized error message
fi
fi
}
Nachdem Sie source ~/.bashrc
laufen, Sie md5sums
wie normale verwenden können Befehl:
md5sums path/to/dir
erzeugt checksums.md5
Datei in path/to/dir
Verzeichnis, enthält MD5 Summen aller Dateien in diesem Verzeichnis und Unterverzeichnisse. Verwendung:
md5sums -c path/to/dir
Summen aus path/to/dir/checksums.md5
Datei zu überprüfen.
Beachten Sie, dass path/to/dir
relativ oder absolut sein kann, md5sums
funktioniert in beide Richtungen. Die resultierende checksums.md5
Datei enthält immer Pfade relativ zu path/to/dir
. Sie können einen anderen Dateinamen als den Standard checksums.md5
verwenden, indem Sie -o
oder --output
als Option angeben. Alle Optionen, außer -c
, --check
, -o
und --output
werden an md5sum
übergeben.
Erste Hälfte von md5sums
Funktionsdefinition ist für die Analyseoptionen verantwortlich. Weitere Informationen dazu finden Sie unter this answer. Die zweite Hälfte enthält erläuternde Kommentare.
Ich würde 'find/path -type f -print0 | empfehlen xargs -0 md5sum', um mit Dateinamen umzugehen, die sonst ungewollt durch Whitespace geteilt werden könnten ... – twalberg
@twalberg Guter Punkt, danke! Ich aktualisiere die Antwort. – taskalman
Danke @taskalman. "Sie können den Pfad erstellen und den Dateinamen aus $ 1 ausgeben, wenn wir ihn in Ihr Skript einfügen. Beachten Sie, dass Sie die Schrägstriche in Ihrem path-Parameter behandeln müssen, damit er Teil des Dateinamens in Ihrem Skript wird." Kannst du das etwas weiter erklären? Ich verstehe nicht ganz, was du meinst. – Bleakley