make_md5sum_for_directory.sh

Czyli zrób sumę kontrolną całej zawartości katalogu. (rekurncyjnie wgłąb)

Z następującymi funkcjami:

  • md5sum_make_for_stdin - liczy sumy kotrolne dla plikow podawanych na jeje standardowe wejscie
  • md5sums_make_for_directory - liczy sumy kotrolne dla plikow w katalogu i wypisuje na standardowe wyjscie

Przy czym zamiast md5sums_make_for_directory, często wystarcza

find -type f -exec md5sum -b "{}" \;

Plik make_md5sum_for_directory.sh

#!/bin/bash

function md5sum_make_for_stdin
{
#This script makes check sums for files from stdinput
a='t'
while [ ! -z "$a" ]; do
        read a
        #echo '> '
        #if [ -f "$a" ]; then
        if [ -r "$a" ]; then
                md5sum -b "$a"
        fi
done
}

function md5sum_make_for_directory
{
dirname=$1
cd "$dirname"
find . -type f | md5sum_make_for_stdin
# lub find -type f -exec md5sum -b "{}" \;
}

# int main(){ :P

if [ \( -z "$1" \) -o \( "$1" == "-h" \) -o \( "$1" == "--help" \) -o \( "$1" == "-help" \) ]; then
        echo -----------------------------------------------------
        echo Usage:
        echo $0 [directory]
        echo
        echo This program makes for \"directory\" a md5 checksum file \"directory.md5\" for all files that consist
        echo
        echo Good advice:
        echo For bach directory md5-sumig use following:
        echo 'for d in $(find * -type d); do echo Processing..."$d"; make_md5sum_for_directory.sh "$d"; done;'
        exit
        fi

dirname=$1
mypwd=$PWD

echo md5sums_make_for_directory "$dirname" '>' "$dirname"_md5sums.md5
md5sums_make_for_directory "$dirname" > "$dirname"_md5sums.md5
cd $mypwd
mv -v "$dirname"_md5sums.md5 "$dirname"

echo
echo Now tu check your directory just type :
echo cd directory_name
echo md5sum -c direcotry_name_md5sums.md5
echo
echo in your case :
echo cd "$dirname"
echo md5sum -c "$dirname"_md5sums.md5
O ile nie zaznaczono inaczej, treść tej strony objęta jest licencją Creative Commons Attribution-ShareAlike 3.0 License